leetcode 128. 最长连续序列

题目链接:leetcode 128

1.题目

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

2.示例

1)示例 1:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

2)示例 2:
输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

3)提示:
0 <= nums.length <= 105
-109 <= nums[i] <= 109

3.分析

可以使用三个map分别对应num是否存在nums数组中、num所在的数组的左端点,num所在的数组的右端点,只要num1-1在nums数组中,就不断移动nums,同理去找到数组的右端点,然后更新[num1,num2]中间的所有数对应的左右端点,可以知道每个节点最多访问一遍文章来源地址https://uudwc.com/A/3w1rb

4.代码

class Solution {
public:
    map<int,int> map1,map2,map3;
    int longestConsecutive(vector<int>& nums) {
        for(int i=0;i<nums.size();i++)
            map1[nums[i]]=1;
        for(int i=0;i<nums.size();i++){
            if(map2.count(nums[i])==0)
            {
                int num1=nums[i];
                while(map1.count(num1)!=0) num1--;
                int num2=nums[i];
                while(map1.count(num2)!=0) num2++;
                for(int j=num1+1;j<num2;j++) {
                    map2[j]=num1+1;
                    map3[j]=num2-1;
                }
            }
        }
        int ans=0;
        for(int i=0;i<nums.size();i++)
            ans=max(ans,map3[nums[i]]-map2[nums[i]]+1);
        return ans;
    }
};

原文地址:https://blog.csdn.net/weixin_43343408/article/details/133095742

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年09月24日 14:27
下一篇 2023年09月24日 14:27