重庆网站建设科技公司,中国建设银行湖南分行官网站,常熟seo关键词优化公司,接网站开发的公司给定一个未排序的整数数组 nums #xff0c;找出数字连续的最长序列#xff08;不要求序列元素在原数组中连续#xff09;的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
128. 最长连续序列 - 力扣#xff08;LeetCode#xff09;
思路#xff1a;
利…给定一个未排序的整数数组 nums 找出数字连续的最长序列不要求序列元素在原数组中连续的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
128. 最长连续序列 - 力扣LeetCode
思路
利用哈希表查找效率O(1)。哈希表中保存不重复的数字作为键值为null之后遍历键如果有连续小于该键的那么向后遍历到最小的那个键之后保存长度。
结果为所有连续序列长度最大值。 示例
筛选起始数字 对于 [4,3,1,2]其实只需要以1作为起始数字查一次就行2、3、4均不需要再作为起始数字进行查询判断因为4之前有3查3肯定会查到4同理3之前有22之前有1所以作为起始数字的条件是不存在 【该数字减一的数字】 通过哈希表查找起始数字 如果通过数组查找起始数字对于 [4,3,3,3] 的包括重复元素的数组筛选起始数字后4不考虑可是数组的3重复了3次就会查询3次但3这个元素其实只需要查询一次即可所以需要去重那么就可以利用哈希表的键值唯一特点数组[4,3,3,3]建立的哈希表键值只有[4,3]筛选掉4之后只剩下元素3不会被元素重复浪费时间
复杂度 时间复杂度O(n) 空间复杂度O(n)
public class Solution {public int LongestConsecutive(int[] nums) {int len nums.Length;if(len 0)return 0;Hashtable ht new Hashtable();for(int i 0; i nums.Length; i){if(!ht.ContainsKey(nums[i])){ht.Add(nums[i],null);}}int resLength 0;foreach(int num in ht.Keys){if(ht.ContainsKey(num - 1))continue;int curLength 0;int curNum num;while(ht.ContainsKey(curNum))curLength;resLength Math.Max(curLength,resLength);}return resLength;}
}