128. Longest Consecutive Sequence

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

For example,
Given [100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4.

Your algorithm should run in O(n) complexity.

一刷
题解:
用map来存储数字和对应的consecutive的长度。
比如{1,2,3,4,5},就将长度信息5保存在1,5中。每次只更新boundary和数字n

public class Solution {
    public int longestConsecutive(int[] num) {
    int res = 0;
    HashMap map = new HashMap();
    for (int n : num) {
        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;
            // sum: length of the sequence n is in
            int sum = left + right + 1;
            map.put(n, sum);
//very important, in case, duplicate will 算出左边的sum和右边的sum, 其实算了重复的两次
            
            // keep track of the max length 
            res = Math.max(res, sum);
            
            // extend the length to the boundary(s)
            // of the sequence
            // will do nothing if n has no neighbors
            map.put(n - left, sum);
            map.put(n + right, sum);
        }
    }
    return res;
}
}

你可能感兴趣的:(128. Longest Consecutive Sequence)