news 2026/4/15 9:11:56

hot100 128.最长连续序列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hot100 128.最长连续序列

思路:

1.题目要求时间复杂度为O(n),而排序的时间复杂度是O(nlogn),因此本题不能排序。

2.核心思路:对于nums中的元素x,以x为起点,不断查找下一个数x + 1,x + 2,...是否在nums中,并统计序列的长度。

3.为了做到O(n)的时间复杂度,需要做到两个关键优化。

(1)把nums中的数都放到一个哈希集合中,这样可以以O(1)的时间复杂度判断数字是否在nums中。

(2)如果x - 1在哈希集合中,则不以x为起点。这是因为以x - 1为起点计算出的序列长度,一定要比以x为起点计算出的序列长度要长,这样可以避免大量重复计算。比如nums == [3,2,4,5],从3开始,可以找到3,4,5这个连续序列;而从2开始,则可以找到2,3,4,5这个连续序列,一定比从3开始找到的连续序列要长。

4.注意:遍历元素的时候,要遍历哈希集合,而不是nums。如果nums =[1,1,1,...,1,2,3,4,5,...](前一半都是1),遍历nums的做法会导致每个1都跑一个O(n)的循环,总的循环次数是O(n^2),会超时。

附代码:

class Solution { public int longestConsecutive(int[] nums) { Set<Integer> set = new HashSet<>(); for(int num : nums){ set.add(num); //把nums转换成哈希集合 } int ans = 0; for(int x : set){ //遍历哈希集合 if(set.contains(x - 1)){ //如果x不是序列的起点,则直接跳过 continue; } //x是序列的起点 int y = x + 1; while(set.contains(y)){ //不断查找下一个数是否在哈希集合中 y++; } // 循环结束后,y - 1就是最后一个在哈希集合中的数 // 长度为 y - 1 - x + 1 = y - x ans = Math.max(ans,y - x); } return ans; } }

小优化:设m为nums中不同元素的个数(即哈希集合的大小)。各个连续序列(链)是相互独立的,如果发现其中一条链的长度至少为m/2(长度×2>=m),由于不可能还有一条长度大于m/2的链(否则这两条链的长度之和就超过m了),答案不会再增大,此时可以直接返回答案。

class Solution { public int longestConsecutive(int[] nums) { Set<Integer> set = new HashSet<>(); for(int num : nums){ set.add(num); //把nums转换成哈希集合 } int m = set.size(); int ans = 0; for(int x : set){ //遍历哈希集合 if(set.contains(x - 1)){ //如果x不是序列的起点,则直接跳过 continue; } //x是序列的起点 int y = x + 1; while(set.contains(y)){ //不断查找下一个数是否在哈希集合中 y++; } // 循环结束后,y - 1就是最后一个在哈希集合中的数 // 长度为 y - 1 - x + 1 = y - x ans = Math.max(ans,y - x); if(ans * 2 >= m){ break; } } return ans; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:04:04

【深度收藏】小猫都能懂的大模型原理:从SFT到RLHF的完全指南

本文以通俗易懂的方式解释了大语言模型的训练原理&#xff0c;重点介绍了SFT&#xff08;监督式微调&#xff09;通过对话训练让模型学会交流&#xff0c;以及RLHF&#xff08;基于人类反馈的强化学习&#xff09;通过人类偏好排序和奖励模型使模型更符合人类期望。文章还探讨了…

作者头像 李华
网站建设 2026/4/15 9:40:30

Dify平台资源占用优化:应对高并发请求的策略

Dify平台资源占用优化&#xff1a;应对高并发请求的策略 在大语言模型&#xff08;LLM&#xff09;加速落地企业场景的今天&#xff0c;越来越多的应用不再满足于“能用”&#xff0c;而是追求“好用”——尤其是在面对成千上万用户同时发起请求时&#xff0c;系统能否保持低延…

作者头像 李华
网站建设 2026/4/12 19:31:55

如何开展一次性能测试?

作为一名性能测试工程师&#xff0c;我深知面对一个全新系统时&#xff0c;不知从何下手的那种迷茫感。本文将为你提供一个系统、具体且可操作性强的性能测试指导方案&#xff0c;旨在帮助你构建清晰的实施路径。 &#x1f3af; 明确性能测试目标 开始性能测试前&#xff0c;首…

作者头像 李华
网站建设 2026/4/15 16:57:07

GitHub热门项目YOLO实战:从克隆到部署全流程

GitHub热门项目YOLO实战&#xff1a;从克隆到部署全流程 在智能制造、城市大脑和自动驾驶的浪潮中&#xff0c;实时视觉感知能力正成为系统智能化的核心支柱。而在这背后&#xff0c;一个名字频繁出现在开发者日志、技术方案书甚至产品发布会PPT中——YOLO。 这不是偶然。当你需…

作者头像 李华
网站建设 2026/4/16 9:03:34

Kafka副本同步机制核心解析

Apache Kafka 中 ReplicaFetcherThread 是 Kafka Follower 副本从 Leader 拉取消息的核心线程类。理解它对掌握 Kafka 的副本同步机制&#xff08;Replication&#xff09;至关重要。 下面我将从 整体架构、关键字段、核心方法、流程逻辑 四个维度帮你系统性地理解这个类。 &a…

作者头像 李华
网站建设 2026/4/13 7:05:31

区块链中数据的完整处理流程

区块链作为一种分布式账本技术&#xff0c;其核心价值在于提供了一种安全、透明且不可篡改的数据处理方式。本文将通过供应链金融和医疗数据共享两个典型案例&#xff0c;详细阐述区块链中数据的完整处理流程&#xff0c;包括数据采集、上链存储、验证机制和智能合约应用等环节…

作者头像 李华