0128. Longest Consecutive Sequence - kumaeki/LeetCode GitHub Wiki

0128. Longest Consecutive Sequence


Given an unsorted array of integers nums, return the length of the longest consecutive elements sequence.

You must write an algorithm that runs in O(n) time.

Example 1:

Input: nums = [100,4,200,1,3,2]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.

Example 2:

Input: nums = [0,3,7,2,5,8,4,6,0,1]
Output: 9

Constraints:

  • 0 <= nums.length <= 10^5
  • -109 <= nums[i] <= 10^9

解法1

key是怎么重复利用之间的计算结果

class Solution {
    public int longestConsecutive(int[] nums) {
        int res = 0;
        Map<Integer, Integer> memo = new HashMap<Integer, Integer>();
        for(int n : nums){
            if(memo.containsKey(n))
                continue;
            
            int left = memo.getOrDefault(n - 1, 0);
            int right = memo.getOrDefault(n + 1, 0);
            // 当前长度等于左链+右链+1
            int sum = left + right + 1;
            
            // 更新最大值
            res = Math.max(res, sum);
            
            // 计算结果放入memo中
            if(left > 0)
                memo.put(n - left, sum);
            if(right > 0)
                memo.put(n + right, sum);
            memo.put(n, sum);
        }
        
        return res;
    }
}