wordpress 屏蔽特定国家ip,seo常用的优化工具,阿里云网站的logo怎么写进去的,搜索引擎营销推广题目 给定一个未排序的整数数组 nums #xff0c;找出数字连续的最长序列#xff08;不要求序列元素在原数组中连续#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1#xff1a;
输入#xff1a;nums [100,4,200,1,3,2]
输出#xff1a…题目 给定一个未排序的整数数组 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;}// 用于判定元素是否重复SetInteger 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