当前位置: 首页 > 后端技术 > Java

LeetCode-128-LongestConsecutiveSequence

时间:2023-04-01 17:08:09 Java

LongestConsecutiveSequence题目描述:给定一个未排序的整数数组nums,求连续数的最长序列的长度(不需要序列元素在原数组中连续)。请设计并实现一个时间复杂度为O(n)的算法来解决这个问题。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:使用哈希表辅助计算,因为哈希查找速度更快。具体过程如下:首先使用HashSet对原数组中的数字进行去重得到numsSet;然后,遍历numsSet中的所有数,使用currentConsecutiveNums记录从当前数开始的numsSet中连续数的最长序列长度,通过哈希查找在numsSet中查找这些连续数,最终得到当前对应的最长连续序列长度数字;如果当前数对应的最长连续序列的长度大于已知最长连续序列longestConsecutiveNums,则更新最长连续序列longestConsecutiveNums的值。最后返回longestConsecutiveNums,即最长连续序列的长度。importjava.util.HashSet;importjava.util.Set;publicclassLeetCode_128{/***哈希表**@paramnums*@return*/publicstaticintlongestConsecutive(int[]nums){//去重numsSet<整数>numsSet=newHashSet<>();for(intnum:nums){numsSet.add(num);}//记录最长的连续序列intlongestConsecutiveNums=0;for(Integernum:numsSet){if(!numsSet.contains(num-1)){//当前数字intcurrentNum=num;//当前数的连续序列长度,初始值为1intcurrentConsecutiveNums=1;//获取当前数为起点,连续数和numsSet中的长度while(numsSet.contains(currentNum+1)){currentNum+=1;当前连续数+=1;}//如果当前最大连续长度大于最大连续序列,更新最大连续序列longestConsecutiveNums=Math.max(longestConsecutiveNums,currentConsecutiveNumscutiveNums);}}返回longestConsecutiveNums;}publicstaticvoidmain(String[]args){int[]nums=newint[]{100,4,200,1,3,2};//测试用例,预期输出:4System.out.println(longestConsecutive(nums));}}【每日一语】第一个青春,上天赐予;第二个青春是自己造就的