執行結果:
通過
顯示詳情
執行用時 :5 ms, 在所有 Java 提交中擊敗了83.59% 的用戶
內存消耗 :39.5 MB, 在所有 Java 提交中擊敗了5.25%的用戶
題目:
給定一個未排序的整數數組,找出最長連續序列的長度。
要求算法的時間複雜度爲 O(n)。
示例:
輸入: [100, 4, 200, 1, 3, 2]
輸出: 4
解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度爲 4。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/longest-consecutive-sequence
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
思路:
利用一個hashset來查找,是否含有下一個大的元素,還有就是優化,遍歷數組的時候,要從連續子序列的第一個數開始遍歷,也就是num-1.
代碼:
class Solution {
public int longestConsecutive(int[] nums) {
if(nums.length==0)
{
return 0;
}
HashSet<Integer> hash=new HashSet<>();
for(int num:nums)
{
hash.add(num);
}
int longest=1;
for(int num:nums)
{
//優化,不需要每個都去找,而是從連續子序列的最小值先找
if(!hash.contains(num-1))
{
int curLongest=1;
int curValue=num;
while(hash.contains(curValue+1))
{
curLongest++;
curValue++;
}
longest=Math.max(longest,curLongest);
}
}
return longest;
}
}