leetcode128 最長連續序列
阿新 • • 發佈:2018-12-03
給定一個未排序的整數陣列,找出最長連續序列的長度。
要求演算法的時間複雜度為 O(n)。
示例: 輸入: [100, 4, 200, 1, 3, 2] 輸出: 4
解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度為 4。
使用一個集合set存入所有的數字,然後遍歷陣列中的每個數字,如果其在集合中存在,那麼將其移除,然後分別用兩個變數pre和next算出其前一個數跟後一個數,然後在集合中迴圈查詢,如果pre在集合中,那麼將pre移除集合,然後pre再自減1,直至pre不在集合之中,對next採用同樣的方法,那麼next-pre-1就是當前數字的最長連續序列,更新res即可。
public int longestConsecutive(int[] nums){ HashSet<Integer> s = new HashSet<>(); int res = 0; for(int num : nums) s.add(num); for(int num : nums){ if(s.remove(num)){ int pre = num - 1, next = num + 1; while(s.remove(pre)) pre--; while(s.remove(next)) next++; res = Math.max(res, next - left - 1); } } return res; }