題意理解
給定乙個未排序陣列,求最大連續數字的長度。這個連續數字可以任意位置。
問題分析
方法1:排序+遍歷
遍歷要點是記錄連續的數字,我用的方法是和前一位比,如果比前一位大1,長度+1,如果相等,不做處理,其他情況,拿當前長度更新最大值,重置當前值為1.
方法複雜度是o(nlogn)
方法2:集合+遍歷
將陣列轉成集合儲存,
遍歷要點找序列的開頭,如果集合中有比當前數小的數,說明不是開頭;否則,就迴圈檢視下乙個數是否在集合中,記錄長度。直到找不到下乙個數為止,更新最大長度。
這個方法的複雜度是o(n),原因是,內層迴圈只有序列頭可用,序列頭越多,每個頭的長度越短,序列頭越少,每個頭的長度越多,所以是o(n + n)複雜度。
其他鏈結
int longestconsecutive(vector& nums)
int max_size = 0;
for (int a : nums)
max_size = max(max_size, current_size);}}
return max_size;
}
int longestconsecutive(vector& nums)
sort(nums.begin(), nums.end());
for (int i = 1; i != nums.size(); ++i)
else if (nums[i] - nums[i - 1] == 0) else
}max_size = max(max_size, current_size);
return max_size;
}
LeetCode 力扣 128 最長連續序列
給乙個陣列,求出連續的數字最多有多少個,時間複雜度要求是o n 首先想一下最直接的暴力破解。我們可以用乙個hashset把給的陣列儲存起來。然後再考慮陣列的每個數,比如這個數是n,然後看n 1在不在hashset中,然後再看n 2在不在,接下來n 3 n 4直到在hashset中找不到,記錄當前的長...
力扣題解系列 128 最長連續序列
給定乙個未排序的整數陣列,找出最長連續序列的長度。要求演算法的時間複雜度為 o n 輸入 100,4 200,1 3,2 輸出 4解釋 最長連續序列是 1,2,3,4 它的長度為 4。對於在陣列中的元素i,若i 1或者i 1也在陣列中,則它們在乙個連續序列中。但是同時考慮i 1和i 1就比較麻煩,而...
力扣第128題最長的連續序列
128.最長連續序列 難度 困難 標籤 並查集 給定乙個未排序的整數陣列,找出最長連續序列的長度。要求演算法的時間複雜度為 o n 示例 輸入 100,4,200,1,3,2 輸出 4 解釋 最長連續序列是 1,2,3,4 它的長度為 4。思路 運用並查集,使用hashmap fatherset k...