1. 程式人生 > 實用技巧 >128. 最長連續序列

128. 最長連續序列

方法一:

class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for(int num : nums) set.add(num);
        int res = 0;
        for(int num : nums) {
            int sum = 1;
            if(!set.contains(num-1)) {
                
while(set.contains(++num)) { sum++; } } res = Math.max(res,sum); } return res; } }

方法二:

  • 用雜湊表儲存每個端點值對應連續區間的長度
  • 若數已在雜湊表中:跳過不做處理
  • 若是新數加入:
    • 取出其左右相鄰數已有的連續區間長度 left 和 right
    • 計算當前數的區間長度為:cur_length = left + right + 1
    • 根據 cur_length 更新最大長度 max_length 的值
    • 更新區間兩端點的長度值
class Solution {
    public int longestConsecutive(int[] nums) {
        int n = nums.length;
        Map<Integer,Integer> map = new HashMap<>();
        int res = 0;
        for(int num : nums) {
            if(!map.containsKey(num)) {
                int l = map.getOrDefault(num-1,0);
                
int r = map.getOrDefault(num+1,0); int len = l + r + 1; res = Math.max(res,len); map.put(num,-1); // 隨便放一個值,表示已訪問過 map.put(num-l,len); map.put(num+r,len); } } return res; } }