1. 程式人生 > >【leetcode】128.(Hard)Longest Consecutive Sequence

【leetcode】128.(Hard)Longest Consecutive Sequence

解題思路:
我的想法是:排序—剔重—找最大連續數
這個做法其實時間複雜度沒到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; } }

執行結果:
在這裡插入圖片描述