企业网站建设方式,军事前沿最新消息,网站做数据分析的意义,网站整体建设方案题目
给定一个未排序的整数数组 nums #xff0c;找出数字连续的最长序列#xff08;不要求序列元素在原数组中连续#xff09;的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
示例 1#xff1a;
输入#xff1a;nums [100,4,200,1,3,2]
输出#xf…题目
给定一个未排序的整数数组 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提示
0 nums.length 10^5-10^9 nums[i] 10^9 解答
源代码
class Solution {public int longestConsecutive(int[] nums) {SetInteger numSet new HashSetInteger();int curLength 0;int maxLength 0;for (int i 0; i nums.length; i) {numSet.add(nums[i]);}for (int num : numSet) {if (numSet.contains(num - 1)) {continue;}curLength 0;while (numSet.contains(num)) {curLength;num;}maxLength Math.max(maxLength, curLength);}return maxLength;}
}
总结
这题因为需要判断某个数有没有相邻的数存在于数组中所以需要用到哈希表来进行查询。用set集合存储去重后的数组元素遍历这个集合我们需要寻找的是一条序列的第一个值。对于当前元素num如果num - 1也存在于set集合中那么num就不是第一个值集合接着向下遍历如果num - 1不在set集合中那么num就可以作为序列的第一个值接着查询num 1是否在集合中……这条序列查询结束后更新最大序列长度。