美文网首页
【Leetcode】128. Longest Consecuti

【Leetcode】128. Longest Consecuti

作者: 随时学丫 | 来源:发表于2018-07-15 11:31 被阅读18次

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

    Your algorithm should run in O(n) complexity.

    Example:

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

    这道题要求求最长连续序列,并给定了 O(n) 复杂度限制。

    思路:

    使用一个集合 set 存入所有的数字,然后遍历数组中的每个数字,如果当前数字其在集合中存在,那么将其移除,然后分别用两个变量 pre 和 next 算出其前一个数跟后一个数,然后在集合中循环查找,如果 pre 在集合中,那么将 pre 移除集合,然后 pre 再自减 1,直至 pre 不在集合之中,对 next 采用同样的方法,那么 next-pre-1 就是当前数字的最长连续序列,更新 res 即可。

    代码如下:

    public class Solution {
        public int longestConsecutive(int[] nums) {
            int res = 0;
            Set<Integer> s = new HashSet<Integer>();
            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 - pre - 1);
                }
            }
            return res;
        }
    }
    

    相关文章

      网友评论

          本文标题:【Leetcode】128. Longest Consecuti

          本文链接:https://www.haomeiwen.com/subject/iycppftx.html