給定一個(gè)未排序的整數(shù)數(shù)組 nums 姆泻,找出數(shù)字連續(xù)的最長序列(不要求序列元素在原數(shù)組中連續(xù))的長度。
進(jìn)階:你可以設(shè)計(jì)并實(shí)現(xiàn)時(shí)間復(fù)雜度為 O(n) 的解決方案嗎济丘?
示例 1:
輸入:nums = [100,4,200,1,3,2]
輸出:4
解釋:最長數(shù)字連續(xù)序列是 [1, 2, 3, 4]棚唆。它的長度為 4。
示例 2:
輸入:nums = [0,3,7,2,5,8,4,6,0,1]
輸出:9
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/longest-consecutive-sequence
解題思路
我們將數(shù)組所有元素放入一個(gè)set
中冗栗,方便判斷某個(gè)元素是否存在
要找出連續(xù)序列演顾,先找出序列的左邊界,也就是序列的最小數(shù)
當(dāng)元素num
存在于set
中而num - 1
不存在與set
中時(shí)num
可作為左邊界
有了左邊界后檢查num + i(i = 1, 2, ...)
然后長度依次+ 1
直到num + i
不存在于set
中
保留最長長度即可
代碼
class Solution {
public int longestConsecutive(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
Set<Integer> set = new HashSet<>();
int result = 0;
for (int num : nums) {
set.add(num);
}
for (int num : nums) {
int len = 1;
// set中不包含num - 1則num可以作為連續(xù)序列的左邊界
if (!set.contains(num - 1)) {
for (int i = 1; set.contains(num + i); i++) {
len++;
}
}
result = Math.max(result, len);
}
return result;
}
}