leetcode(数组)128.最长连续序列(c++详细解释)DAY8

文章目录

  • 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;
        }
};

结果

leetcode(数组)128.最长连续序列(c++详细解释)DAY8_第1张图片

4.总结

今天感冒了,有点难受。题不算难,应该还有更简单的哈希表法,后续会补上。

自信,坚持,upup~


2.13更
经了解,哈希表在本题不如使用暴力破解更高效(主要本题问题规模不大),所以哈希表解法不更了

你可能感兴趣的:(C++刷题,leetcode,c++,算法)