【Golang】LeetCode 128. 最长连续序列

128. 最长连续序列

题目描述

思路

题目要求我们以O(n)的时间复杂度解决当前问题,解决的具体手段就是使用哈希表。

首先我们创建一个类型为map[int]bool的哈希表,用于记录nums数组当中某个数是否出现过。

之后,我们开始对哈希表的key进行遍历,来寻找当前的key对应的可能的连续序列。

此处有一个小技巧,那就是如果key - 1这个数已经在map当中出现过了,我们就不再对key的连续序列进行查找了,原因是如果key - 1已经出现过,那么key一定已经在遍历key - 1寻找其连续序列时被遍历过了,我们不需要对其连续序列进行重复查找,因为此时找到的连续序列的长度已经没有以key - 1作为起点找到的连续序列要短。

如果key - 1不在map当中,我们开始对key进行遍历。我们令curr, currLen := num, 0,我们以mp[curr] == true作为条件进行遍历,并在每一次循环时令curr, currLen = curr + 1, currLen + 1,也就是每一次都寻找当前数加一的后面的那个数,如果它在哈希表当中,则增大当前连续序列的长度。

最后令ans = max(ans, currLen),最终返回ans就是我们想要的答案。

Golang 题解

go 复制代码
func longestConsecutive(nums []int) int {
    mp := map[int]bool{}
    for _, num := range nums {
        mp[num] = true
    }

    ans := 0
    for num := range mp {
        if mp[num - 1] != true {
            curr, currLen := num, 0
            for mp[curr] {
                curr ++
                currLen ++
            }
            ans = max(ans, currLen)
        }
    }

    return ans
}
相关推荐
m0_629494731 小时前
LeetCode 热题 100-----17.缺失的第一个正数
数据结构·算法·leetcode
Tisfy1 小时前
LeetCode 0796.旋转字符串:暴力模拟
算法·leetcode·题解·模拟·字符串匹配
小雅痞2 小时前
[Java][Leetcode middle] 209. 长度最小的子数组
java·算法·leetcode
浅念-5 小时前
吃透栈:LeetCode 栈算法题全解析
数据结构·c++·算法·leetcode·职场和发展·
阿Y加油吧5 小时前
二刷 LeetCode:62. 不同路径 & 64. 最小路径和 复盘笔记
笔记·算法·leetcode
承渊政道6 小时前
【动态规划算法】(两个数组的DP问题深度剖析与求解方法)
数据结构·c++·学习·算法·leetcode·动态规划·哈希算法
加农炮手Jinx6 小时前
LeetCode 26. Remove Duplicates from Sorted Array 题解
算法·leetcode·力扣
加农炮手Jinx6 小时前
LeetCode 88. Merge Sorted Array 题解
算法·leetcode·力扣
阿Y加油吧6 小时前
二刷 LeetCode:75. 颜色分类 & 31. 下一个排列 复盘笔记
笔记·算法·leetcode
小雅痞6 小时前
[Java][Leetcode middle] 3. 无重复字符的最长子串
java·开发语言·leetcode