1. 程式人生 > 其它 >128. 最長連續序列 中等

128. 最長連續序列 中等

128. 最長連續序列

題目:

給定一個未排序的整數陣列 nums ,找出數字連續的最長序列(不要求序列元素在原陣列中連續)的長度。

請你設計並實現時間複雜度為 O(n) 的演算法解決此問題。

 

示例 1:

輸入:nums = [100,4,200,1,3,2]
輸出:4
解釋:最長數字連續序列是 [1, 2, 3, 4]。它的長度為 4。

 

思路:

先使用unordered_set儲存所有數字。然後遍歷set,當遇到num-1不屬於set時,以num為起點內迴圈遍歷num+1並計數。

由於只會選擇連續序列的頭進行內迴圈遍歷,時間複雜度為O(n)

 

class Solution {
public:
    
int longestConsecutive(vector<int>& nums) { unordered_set<int> num_set; for(int i:nums){ num_set.insert(i); } int ret=0; for(int i:num_set){ if(num_set.count(i-1)==0){ int sum=0; int num=i;
while(num_set.count(num)>0){ num++; sum++; } ret=max(ret,sum); } } return ret; } };