Longest Consecutive Sequence@LeetCode

Longest Consecutive Sequence

本题直观的解法就是排序之后遍历,但是题目要求只用O(n)的复杂度,那么先排序显然是无法满足要求的。

那么这种『显然要遍历所有元素,但是却只给了O(n)的复杂度』,这样就想到了HashMap。把数组中的每个元素都放入一个HashMap中为keyvalueboolean类型,表示该元素有没有访问过。然后,对于数组中的每个元素,要是没有被访问过,就对其进行计数——往前遍历及往后遍历,直到下一个元素不存在于表中为止。那么这样就保证了在整个计数过程中,所有元素都只被访问了一次。

实现代码:

javapublic class Solution {
    public int longestConsecutive(int[] num) {
        HashMap<Integer, Boolean> visited = new HashMap<Integer, Boolean>();
        int length = num.length, max = 0;
        for (int n : num) {
            visited.put(n, false);
        }
        for (int i = 0; i < num.length; i++) {
            int n = num[i];
            if (visited.get(n)) {
                continue;
            }
            int count = 1;
            for (int left = n - 1; left >= n - length + 1; left--) {
                if (visited.containsKey(left)) {
                    visited.put(left, true);
                    count++;
                } else {
                    break;
                }
            }
            for (int right = n + 1; right <= n + length - 1; right++) {
                if (visited.containsKey(right)) {
                    visited.put(right, true);
                    count++;
                } else {
                    break;
                }
            }
            max = Math.max(max, count);
        }
        return max;
    }
}

1.1k 声望
64 粉丝
0 条评论
推荐阅读
关于 C++ vector 的两个小 tips
本来这篇文章标题我想起成《关于 vector 的两个小坑》,后来想想,其实也不算是坑,还是自己对原理性的东西理解的没做那么透彻。工作中遇到的很多问题,后来归根到底都是基础不牢靠。

findingea阅读 1.5k

【每日一题】T 秒后青蛙的位置
1377. T 秒后青蛙的位置关键词:深度优先题目来源:1377. T 秒后青蛙的位置 - 力扣(Leetcode)题目描述 {代码...} 给你一棵由 n 个顶点组成的无向树,顶点编号从 1 到 n。青蛙从 顶点 1 开始起跳。规则如下:在...

字节幺零二四阅读 665

封面图
【算法竞赛】力扣周赛(节选)2022-04-30
力扣周赛(节选)2022-04-306404. 将数组清空关键词:树状数组、找规律题目来源:6404. 将数组清空 - 力扣(Leetcode)——力扣第 103 场双周赛第4题题目描述 {代码...} 给你一个包含若干 互不相同 整数的数组 nums...

字节幺零二四阅读 644

封面图
【每日一题】翻转子数组得到最大的数组值
给你一个整数数组 nums 。「数组值」定义为所有满足 0 &lt;= i &lt; nums.length-1 的 |nums[i]-nums[i+1]| 的和。

字节幺零二四阅读 594

封面图
【每日一题】摘水果
在一个无限的 x 坐标轴上,有许多水果分布在其中某些位置。给你一个二维整数数组 fruits ,其中 fruits[i] = [positioni, amounti] 表示共有 amounti 个水果放置在 positioni 上。fruits 已经按 positioni 升序排...

字节幺零二四阅读 525

封面图
leetcode 2413 最小偶倍数
今天这题比较简单,一行代码就解决了,思路其实简单,就是判断下当前数的奇偶性,如果是偶数,那么最小公倍数肯定就是数本身;如果是奇数,那么就是两个数的乘积。

MMzhe阅读 459

封面图
【每日一题】使二叉树所有路径值相等的最小代价
给你一个整数 n 表示一棵 满二叉树 里面节点的数目,节点编号从 1 到 n 。根节点编号为 1 ,树中每个非叶子节点 i 都有两个孩子,分别是左孩子 2 * i 和右孩子 2 * i + 1 。

字节幺零二四阅读 456

封面图
1.1k 声望
64 粉丝
宣传栏