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

【力扣 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.xdnf.cn/news/17192.html

相关文章:

  • 微服务架构及常见微服务技术栈
  • 【motion】HumanML3D 的安装2:psbody-mesh安装成功
  • ubuntu24中部署k8s 1.30.x-底层用docker
  • 海信IP810N/海信IP811N_海思MV320-安卓9.0主板-TTL烧录包-可救砖
  • 第13届蓝桥杯Scratch_选拔赛_初级组_真题2022年1月22日
  • AcWing 3690:求交点 ← 复旦大学考研机试题 + 克莱姆法则
  • DHCP 握手原理
  • 【学习嵌入式day-18-数据结构-循环链表】
  • 代码随想录day57图论7
  • CodeBuddy IDE 使用测评——半小时做一个web可视化数据工具
  • 基于WOA鲸鱼优化的VMD-GRU时间序列预测算法matlab仿真
  • uniapp 类似popover气泡下拉框组件
  • LeetCode——2683. 相邻值的按位异或
  • Spring Boot 与 Ollama 集成部署私有LLM服务 的完整避坑指南,涵盖 环境配置、模型管理、性能优化 和 安全加固
  • 【Electron】electron-vite中基于electron-builder与electron-updater实现程序远程自动更新,附源码
  • 对于包含大量文件的程序的便捷makefile操作
  • 建筑地产安全监控误报率↓77%:陌讯多模态融合算法实战解析
  • 布控球是什么?布控球有什么作用?什么场景下会使用到布控球设备?一篇短文带你了解
  • Windows驱动更新下载工具,电脑硬件设备驱动程序自动安装下载更新,可备份还原!键盘鼠标声卡网卡显卡主板硬盘驱动都可以下载,免费使用的神器!
  • 【软考中级网络工程师】2021年下半年上午真题及答案解析
  • 【科研绘图系列】R语言绘制误差棒图
  • C++继承关系中,深度解析类内存布局与多态的实现
  • PDF 文本提取技术深度对比:基于规则与基于模型的两种实现
  • 【乐企板式文件生成工程】关于乐企板式文件(PDF/OFD/XML)生成工程介绍
  • 结合opencv解释图像处理中的结构元素(Structuring Element)
  • C语言的结构体与联合体
  • 通信算法之301:IP核之单双端口 RAM和FIFO 读写
  • 【设计模式】代理模式
  • 【HUST】计算机|大学计算机基础内容(纯科普向)+数据结构数组、树、队列【旧文搬运】
  • Mac上pnpm的安装与使用