当前位置:网站首页>Leetcode刷题——128. 最长连续序列
Leetcode刷题——128. 最长连续序列
2022-08-03 05:20:00 【lonelyMangoo】
题目
思路
遍历数组,用map集合记录已经遍历的数。
key表示当前数,value表示该数所在序列的长度。
有当key值不在map中时(防止重复),进行如下操作,假设当前值是num:
- 当num-1存在时,记录map中num-1的值left
- 当num+1存在时,记录map中num+1的值right
- 所以当前的长度就是left+right+1。
- 判断并保留最大值。
- 关键一步:将另外两个边界设为和第三步中一样,这样边界都确定了。并且由于循环中不会去找已经在map中存在的,所以避免了重复的情况的发生。
代码
public static int longestConsecutive(int[] nums) {
Map<Integer, Integer> map = new HashMap<>(nums.length);
int max = 0;
for (int num : nums) {
int left = 0;
int right = 0;
if (!map.containsKey(num)) {
if (map.containsKey(num - 1)) {
left = map.get(num - 1);
}
if (map.containsKey(num + 1)) {
right = map.get(num + 1);
}
int nowLen = left + right + 1;
if (nowLen > max) {
max = nowLen;
}
//这一片都处理过了
map.put(num-left,nowLen);
map.put(num+right,nowLen);
map.put(num, nowLen);
}
}
return max;
}

边栏推荐
猜你喜欢
随机推荐
详解Nurbs曲线
【frp内网穿透】
NotImplementedError: file structure not yet supported
一劳永逸解决vs编译器无法使用scanf函数
ModelArts第二次培训
浏览器中的 preview 和 response 的值不一致
私有变量(private) 【详细+易懂】
MySQL 一些函数
【myPow,2次幂,3次幂..代码实现】
Greetings(状压DP,枚举子集转移)
VSO Downloader Ultimate 5.0.1.45 中文多语免费版 在线视频下载工具
flask 面试题 问题
ansible的安装和部署详细过程,配置清单基本操作
运行 npm run xxx 如何触发构建命令以及启动Node服务等功能?
【编程学习新起点】记录写博客的第一天
Sentinel初次使用Demo测试
Djiango第四次培训笔记
初识C语言
【DC-4靶场渗透】
数据分析 第一篇









