昆山住房和城乡建设部网站可以上传资源的网站开发费用
2026/4/15 18:18:26 网站建设 项目流程
昆山住房和城乡建设部网站,可以上传资源的网站开发费用,修改wordpress上传图片路径,广告公司简介范文大全题目链接#xff1a;128. 最长连续序列#xff08;中等#xff09; 算法原理#xff1a; 解法#xff1a;哈希表 23ms击败91.35% 时间复杂度O(N) 题目要求时间复杂度是O(N)#xff0c;那么我们就不能直接调用Arrays.sort直接排序#xff0c;因为这样的话时间复杂度会飙升…题目链接128. 最长连续序列中等算法原理解法哈希表23ms击败91.35%时间复杂度O(N)题目要求时间复杂度是O(N)那么我们就不能直接调用Arrays.sort直接排序因为这样的话时间复杂度会飙升到O(NlogN)由于让求的是最长连续序列重点在连续意味着同样的数只要出现一次就够用了所以可以去重省下大量的遍历①把所有数全扔进Set容器里这样可以用O(1)来判断这个数是否在nums中②如果x-1在哈希集合中那么就不能以x为起点了因为以x-1为起点计算出的序列长度一定比以x为起点计算出的序列长度要长所以直接跳过即可可以避免大量的重复计算比如nums[5,2,4,3]从3开始找到的序列是345而从2开始找到的是2345③小优化当以当前x为起点找到的序列长度超过原数组长度一半时那么就无需再找了因为没有序列能比这个还长了直接返回结果即可Java代码class Solution { public int longestConsecutive(int[] nums) { SetInteger hashnew HashSet(); //把nums里的元素全扔哈希表里 for(int x:nums) hash.add(x); int ret0; for(int x:hash){ //如果x前面还有更小的那么当前x一定不能作最长连续子序列的起点直接跳过 if(hash.contains(x-1)) continue; //x是序列的起点 int yx1; while(hash.contains(y)) y; //循环结束之后y-1是最后一个在哈希集合的数 //从x到y-1一共y-x个数 retMath.max(ret,y-x); //小优化当前连续子序列长度超过原数组的一半时 //不可能再有比这个长的了直接返回 if(ret*2hash.size()) break; } return ret; } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询