【leetcode】128.(Hard)Longest Consecutive Sequence
阿新 • • 發佈:2018-12-18
解題思路:
我的想法是:排序—剔重—找最大連續數
這個做法其實時間複雜度沒到O(n)但是也通過了
提交程式碼:
class Solution {
public int longestConsecutive(int[] nums) {
if(nums.length==0) return 0;
Arrays.sort(nums);
// remove the duplicate
int p1=0,p2=1;
while(p2<nums.length) {
int flag= nums[p1];
while(p2<nums.length&&nums[p2]==flag)
p2++;
if(p2<nums.length) {
nums[++p1]=nums[p2++];
}
}
int i=1,cnt=1;
while(i<=p1) {
int curCnt=1;
while(i<=p1&&nums[i]==nums[i- 1]+1) {
curCnt++;
i++;
}
if(curCnt>cnt) cnt=curCnt;
i++;
}
return cnt;
}
}
執行結果:
然後還有另外一種做法用了hashmap,耗時是O(n),但是OJ實際執行下來居然比我的還耗時,有點搞不懂。
提交程式碼:
class Solution {
public int longestConsecutive(int[] nums) {
Map< Integer,Integer> map=new HashMap<>();
int res=0;
for(int n: nums) {
if(!map.containsKey(n)) {
int left=map.containsKey(n-1)?map.get(n-1):0;
int right=map.containsKey(n+1)?map.get(n+1):0;
int curLen=left+right+1;
res=Math.max(curLen, res);
map.put(n,curLen);
map.put(n-left, curLen);
map.put(n+right, curLen);
}
}
return res;
}
}
執行結果: