leetcode之longest-consecutive-sequence(求数组最长连续数长度)

leetcode之longest-consecutive-sequence(求数组最长连续数长度)

题目

Given an unsorted array of integers, find the length of the longest consecutive elements sequence.

For example,
Given[100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is[1, 2, 3, 4]. Return its length:4.

Your algorithm should run in O(n) complexity.

题意

给定一个integers类型的数组,求出这个数组中,连续元素最长的长度是多少?
例如:
[100, 4, 200, 1, 3, 2]这个数组的最长连续元素时 1,2,3,4。则它的最长长度是4;
现在要求给出一个时间复杂度在O(n)的解法,给定一个数组吗,返回连续元素最长长度。

思路

这里要求时间复杂度在O(n),所以绝对不能使用排序去做,这里有个方法就是可以通过HashSet去做:
1、将所有元素都丢入set中;
2、然后逐个遍历整个vector内的元素;
3、如果这个元素可以找到,则将该元素从set中删除,并求这个数相邻的数是否在这个set内(即i-1,,i+1);
4、直到找不到为止,就记录下本次这个set里 该连续元素的长度,即 右边数-左边数+1;
5、循环以上步骤,直至遍历完所有的vector内元素,找出最大的那个长度,返回既可;

C++实现代码

class Solution {
public:
    int longestConsecutive(vector<int> &num) {
        set<int>  set(num.begin(),num.end());
        int result=1;
        for(int i:num){
            if(set.find(i)==set.end())
                continue;
            set.erase(i);
            int l=i-1;
            int r=i+1;
            while(set.find(l)!=set.end()){
                set.erase(l);
                l--;
            }
            while(set.find(r)!=set.end()){
                set.erase(r);
                r++;
            }
            result = max(result,r-l-1);
        }
        return result;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值