【算法分析与设计】数字连续的最长序列
2024-01-09 16:56:28
题目
给定一个未排序的整数数组?
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
思路
第一思路是:先将他们排序,之后找到最长的一段连续数字之后返回长度即可。emmm看着还是比较简单
实际书写遇到的问题
他会有多个数相同的情况,这个一般是会影响我们判断长度的就需要去重,自然就是用Set集合
之后怎么将Set集合转化为数组呢?
最笨的方式一个一个取出来,然后依次装入数组排序。不好,空间利用率低。
苦思冥想emmmm..............
可以直接在原来 的num中判断。当出现重复的数时直接跳过即可。判重还是用set.add(),他会返回一个boolean显示是否加入成功。
算法流程图
?代码实现
class Solution {
public int longestConsecutive(int[] nums) {
if(nums.length == 0) {
return 0;
}
// 用于判定元素是否重复
Set<Integer> set = new HashSet<>();
int length = 1;
int maxLength = 1;
// 排序
Arrays.sort(nums);
for(int i =1; i< nums.length; i++) {
// 当元素存在时, 保持length不变。
if( ! set.add(nums[i])) {
continue;
}
// 连续的元素: 翻译下:就是nums[i-1] + 1 = nums[i]
if(nums[i-1] + 1 == nums[i]) {
length ++;
// 当出现多串连续元素时, 取最大length: 。
maxLength = Math.max(length, maxLength);
}else{
length = 1;
}
}
return maxLength;
}
}
执行结果:
时间23ms, 空间63.37MB?
?
文章来源:https://blog.csdn.net/m0_62645012/article/details/135481757
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!