zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 128 最长连续序列

    128. 最长连续序列

    给定一个未排序的整数数组,找出最长连续序列的长度。

    要求算法的时间复杂度为 O(n)。

    示例:

    输入: [100, 4, 200, 1, 3, 2]
    输出: 4
    解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

    class Solution {
         public int longestConsecutive(int[] nums) {
            Set<Integer> numsSet = new HashSet<>();
            for (Integer num : nums) {
                numsSet.add(num);
            }
            int longest = 0;
            for (Integer num : nums) {
                if (numsSet.remove(num)) {
                    // 向当前元素的左边搜索,eg: 当前为100, 搜索:99,98,97,...
                    int currentLongest = 1;
                    int current = num;
                    while (numsSet.remove(current - 1)) current--;
                    currentLongest += (num - current);
    		// 向当前元素的右边搜索,eg: 当前为100, 搜索:101,102,103,...
                    current = num;
                    while(numsSet.remove(current + 1)) current++;
                    currentLongest += (current - num);
            	// 搜索完后更新longest.
                    longest = Math.max(longest, currentLongest);
                }
            }
            return longest;
        }
    }
    
  • 相关阅读:
    123
    p1216
    离线可持久化动态树
    线段树合并
    p2024
    树的dfs序,p1539,p1651,,2018/11/08模拟赛T3
    p1460
    CDQ分治,二维数点与三维数点,p1357与p2026与p2027与p2028与p2029
    自动AC机
    平衡二叉树之splay p1998
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13076162.html
Copyright © 2011-2022 走看看