当前位置: 首页 > news >正文

【力扣 Hot100】 刷题日记

D3

128.最长连续序列

错解
class Solution {public int longestConsecutive(int[] nums) {Arrays.sort(nums);int maxCnt = 0;int cnt = 0;for (int i = 0; i < nums.length - 1; i++) {if(nums[i] != nums[i + 1] - 1){//如果不连续,取cnt与maxCnt较大值,cnt清零maxCnt = Math.max(cnt, maxCnt);cnt = 0;}else{cnt++;maxCnt = Math.max(cnt, maxCnt);}}return maxCnt = maxCnt != 0 ? maxCnt + 1 : maxCnt;}
}

这里我犯了一个错误,把连续理解为了,索引连续并且元素大小连续。事实上,题目中只需要保证元素大小连续即可,比如1 1 2 2 3,最大连续长度为3,最先想到的是用Treeset去重排序,但我看题目提示是哈希表。

TreeSet朴素解法

就是提供两个计数器,记录连续元素的长度以及最大长度,虽然是一次for循环就解决了,但是TreeSet的排序时间复杂度是O(log n),所以总体时间复杂度是O(nlogn),是不符合题意的。

class Solution {public int longestConsecutive(int[] nums) {int cnt = 1; //当前连续长度int maxCnt = 1; //Set<Integer> set = new TreeSet<>();for (int num : nums) {set.add(num);}if(set.isEmpty()) return 0;if(set.size() == 1) return 1;Iterator<Integer> it = set.iterator();int prev = it.next();while(it.hasNext()){int current = it.next();if(current != prev + 1){maxCnt = Math.max(maxCnt, cnt);cnt = 1;}else{cnt++;maxCnt = Math.max(maxCnt, cnt);}prev = current;}return maxCnt;}
}
HashSet解法

这种方法时间复杂度为O(n),符合题意。

思路:

使用set是为了保证元素不重复,降低时间复杂度,因为题目有说,不要求元素在原序列连续。如果集合中有元素x-1,那么最长长度一定是从x-1开始,比如数组1 2 4 6 7 8 9,如果有6,那么从6开始的序列最长长度就不会从7开始,所以只要统计出从某个元素开始的连续元素的最大值,某个元素到这个最大值的元素数目就是最大值。

代码如下:

class Solution {public int longestConsecutive(int[] nums) {Set<Integer> set = new HashSet<>();for(int num : nums){set.add(num);}int ans = 0;for(int x : set){if(set.contains(x-1)){//如果还有更小的连续元素,找最小元素continue;}int y = x + 1;while(set.contains(y)){y++;}ans = Math.max(ans, y - x);//获取最大元素长度}return ans;}}
http://www.dtcms.com/a/317009.html

相关文章:

  • linux定时器管理 timer_*系统调用及示例
  • LeetCode 112. 路径总和解题思路详解(BFS算法深入理解)
  • AI模型整合包上线!一键部署ComfyUI,2.19TB模型全解析
  • ES(Elasticsearch)进程掉线(节点脱离集群)问题
  • 协同过滤基础——基线预测器(Baseline Predictors)
  • 深入理解 Ext 系列文件系统:从磁盘物理到文件系统原理
  • QtPromise第三方库的介绍和使用
  • STM32学习笔记2-GPIO的输出模式
  • 宠智灵宠物AI大模型聚焦医疗核心场景,提升临床决策能力
  • Bilateral Reference for High-Resolution Dichotomous Image Segmentation
  • mmsegmentation·数据结构
  • 《零基础入门AI:传统机器学习进阶(从拟合概念到K-Means算法)》
  • 力扣刷题日常(15-16)
  • 深信服GO面试题及参考答案(下)
  • MCP与Function Calling
  • 三极管基本放大电路静态及动态参数计算
  • 【C++】类和对象2
  • nfs(网络文件系统)+autofs(自动挂载服务)
  • 创维智能融合终端DT741_移动版_S905L3芯片_安卓9_线刷固件包
  • I6328A 蓝牙模块 做 串口透传 操作记录
  • pipeline方法关系抽取--课堂笔记
  • 海信IP810N/海信IP811N_海思MV320-安卓9.0主板-TTL烧录包-可救砖
  • 检索召回率优化探究四:基于LangChain0.3集成Milvu2.5向量数据库构建的智能问答系统
  • 【基础】第八篇 Java 位运算符详解:从基础到实战应用
  • 数据结构:双向链表、循环链表、内核链表
  • 【文本左右对齐】
  • 落霞归雁:从自然之道到“存内计算”——用算法思维在芯片里开一条“数据高速航道”
  • SpringCloud学习-------Feign详解
  • 面试题:前端权限设计
  • 【Spring Cloud】-- 注册中心