文章目录
- 1.题目
- 示例
- 提示
- 2.解答思路
- 3.实现代码
- 结果
- 4.总结
1.题目
给定一个未排序的整数数组 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
2.解答思路
对vector对象可以直接使用sort函数进行排序
对排序后的nums进行一遍遍历
直接利用count记录最长长度
若满足nums[i+1]=nums[i]+1,直接count++
注意:若数组排序0 1 1 2
需要考虑这种情况
怎此增加判断是否nums[i+1]=nums[i]
若是,则count值不变
否则,令count=1
3.实现代码
class Solution {
public:int longestConsecutive(vector<int>& nums) {int count=1,n=nums.size();int maxLen=1;if(n==0 || n==1){//若为空,则直接输出return n;}sort(nums.begin(),nums.end());//vector对象直接排序for(size_t i=0;i<n-1;++i){ if(nums[i+1]==nums[i]+1){count++;if(count>maxLen)maxLen=count;}else if(nums[i]!=nums[i+1]){count=1;}}return maxLen;}
};
结果
4.总结
今天感冒了,有点难受。题不算难,应该还有更简单的哈希表法,后续会补上。
自信,坚持,upup~
2.13更
经了解,哈希表在本题不如使用暴力破解更高效(主要本题问题规模不大),所以哈希表解法不更了