給未排序整數數組,求最長連續整數序列的長度(序列中數字可不連續存放)。要求 O(n) 時間。
例:`[100,4,200,1,3,2]` → 最長 `[1,2,3,4]` 長度 4。
class Solution {
public int longestConsecutive(int[] nums) {
if (nums == null || nums.length == 0) return 0;
Set set = new HashSet<>();
for (int x : nums) set.add(x);
int res = 1;
for (int x : nums) {
if (!set.contains(x - 1)) { // 起點
int cur = x, len = 1;
while (set.contains(cur + 1)) {
++cur; ++len;
}
res = max(res, len);
}
}
return res;
}
}
最長連續序列 O(n) 經典解法:HashSet 存所有數,只從序列起點(無前驅)向後擴展計算長度。避免了排序 O(n log n),體現「以空間換時間 + 只處理起點」的巧妙優化。