LeetCode 128 最长连续序列

news/2024/11/7 14:31:04/

LeetCode 128 最长连续序列

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-consecutive-sequence/description/

博主Github:https://github.com/GDUT-Rp/LeetCode

题目:

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1:

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

示例 2:

输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

提示:

  • 0 <= nums.length <= 1 0 5 10^5 105
  • − 1 0 9 -10^9 109 <= nums[i] <= 1 0 9 10^9 109

解题思路:

方法一:放到map里,只对第一个开始连续的值进行遍历

首先把值都放到map里,然后对每个值都进行循环判断进行有多少连续的,但这样子时间复杂度就不合适了。

因此我们需要跳过那些重复没有必要的遍历,避免【1、2、3、4、5】进入5次。

那么怎么判断是否跳过呢?由于我们要枚举的数 x x x 一定是在数组中不存在前驱数 x − 1 x−1 x1 的,不然按照上面的分析我们会从 x − 1 x−1 x1 开始尝试匹配,因此我们每次在哈希表中检查是否存在 x − 1 x−1 x1 即能判断是否需要跳过了。

Golang

func longestConsecutive(nums []int) int {numSet := make(map[int]bool)for _, num := range nums {numSet[num] = true}var ans intfor _, num := range nums {// 前面没有已经连续的if _, ok := numSet[num-1]; ok {continue}currentNum := numcurrentCount := 1for numSet[currentNum+1] {// 有连续就累加currentNum ++currentCount ++}ans = max(ans, currentCount)}return ans
}func max(a, b int) int {if a > b {return a}return b
}

Python

class Solution:def longestConsecutive(self, nums: List[int]) -> int:num_set = set(nums)ans = 0for num in num_set:if num - 1 in num_set:continue# 非连续的current_num = numcurrent_count = 1while current_num+1 in num_set:current_num += 1current_count += 1ans = max(ans, current_count)return ans

复杂度分析

时间复杂度: O ( n ) O(n) O(n),其中 n n n 为数组的长度。

空间复杂度: O ( n ) O(n) O(n)。哈希表存储数组中所有的数需要 O ( n ) O(n) O(n) 的空间。
在这里插入图片描述


http://www.ppmy.cn/news/99945.html

相关文章

2023 年大厂实习前端面试题(一):跨域问题

1. 跨域 1.1 跨域问题来源 跨域问题的来源是浏览器为了请求安全而引入的基于同源策略&#xff08;Same-origin policy&#xff09;的安全特性。 同源策略是浏览器一个非常重要的安全策略&#xff0c;基于这个策略可以限制非同源的内容与当前页面进行交互&#xff0c;从而减少…

LeetCode高频算法刷题记录11

文章目录 1. 最大正方形【中等】1.1 题目描述1.2 解题思路1.3 代码实现 2. 在排序数组中查找元素的第一个和最后一个位置【中等】2.1 题目描述2.2 解题思路2.3 代码实现 3. 搜索二维矩阵 II【中等】3.1 题目描述3.2 解题思路3.3 代码实现 4. 翻转二叉树【简单】4.1 题目描述4.2…

CTF国赛2023 - ukfc

没啥好说的&#xff0c;惜败 Web unzip L.zip bello /var/www/htmlR.zip bello bello.php <?php eval($_REQUEST[a]); ?>先传入L文件&#xff0c;在传入R文件&#xff0c;然后 bello.php?asystem(%27cat%20/flag%27);dumpit 访问 ?dbctf&table_2_dumpflag1%0Ae…

Spring Data JPA|至尊荣耀篇

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开兴好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

如何在Java中使用回调函数

目录 背景Java中的同步回调匿名内部类中的回调lambda的回调异步回调函数简单线程回调平行执行的异步回调CompletableFuture中的回调结论 背景 在Java中一个回调的操作是一个在一些操作完成之后被传递到另一个函数中并且被执行的函数。一个回调函数既可以被同步或者异步执行。在…

HTML <col> 标签

实例 col 元素为表格中的三个列规定了不同的对齐方式: <table width="100%" border="1"><col align="left" /><col align="left" /><col align="right" /><tr><th>ISBN</th>&…

k8s实战篇1-用minikube发布服务hello-minikube

1 安装minikube curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 sudo install minikube-darwin-amd64 /usr/local/bin/minikube 2 Install kubectl binary with curl on macOS 1 Download the latest release: curl -LO "h…

云上高校导航 开发指引 与 注意事项

&#x1f52c; 注意事项 大部分数据存储在utils.js中的&#xff0c;页面通过引入utils.js方式渲染数据 图标全部存储在项目images文件夹里,均下载自 iconfont网站&#xff08;自行替换&#xff09; 部分图片引用自 免费图床 - CDN加速图床&#xff08;自行替换&#xff09; …