自学内容网 自学内容网

3 最长连续序列(set)

给定一个未排序的整数数组 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

    // 间接就给过滤了用过滤的数据进行逻辑+-判断

int findMAX(int& k1, int& k2) {
     if (k1 > k2) {

         return k1;
     }
     else {
         return k2;
     }
}
 int longestConsecutive(vector<int>& nums) {
    if (nums.size() == 0) {
        return 0;
    }
    // 用于判定元素是否重复
    unordered_set<int> set;
    int length = 1;
    int maxLength = 1;
    // 排序
    // 对数组进行排序
    sort(nums.begin(), nums.end());

    for (int i = 1; i < nums.size(); i++) {
        // 当元素存在时, 保持length不变。
        // 如果元素已经存在于 set 中,那么插入操作将失败,insert 方法的 second 成员将为 false
        if (!set.insert(nums[i]).second) {
            continue;
        }
        // 连续的元素: 翻译下:就是nums[i-1] + 1 = nums[i]
        if (nums[i - 1] + 1 == nums[i]) {
            length++;
            // 当出现多串连续元素时, 取最大length: 。
           maxLength = findMAX(length, maxLength);
        }
        else {
            length = 1;
        }

    }
    return maxLength;
}
int main()
{
  
    vector<int>  nums = { 2,3,5,6,1,3,5,6,7,5,8,9};
    int count=longestConsecutive(nums);
    cout << count;
}


原文地址:https://blog.csdn.net/u012545581/article/details/135458935

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!