128. Longest Consecutive Sequence

严格来说这道题算是诈胡吧,而且理论上来说难度也没达到hard,直接上题目吧:

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

Your algorithm should run in O(n) complexity.

Example:

Input: [100, 4, 200, 1, 3, 2]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.

大概意思就是给一个没有排序的序列,让你从中找到一个最长的连续序列,连续的意思就是自然数那样的,后一个比前一个大1就行了,然后输出这个长度。O(n)的复杂度。

本来我只是想试一试而已,因为快排的复杂度是O(nlogn)的,是不满足复杂度O(n)的,但是抱着试一试的心态我还是写了一个暴力的方法。先排一下序,然后从第一个数开始遍历,如果后一个比前一个数大1,就表示满足连续的条件,在答案ans上加1,如果不满足就表明这个序列断掉了,保存这个长度,然后找下一个连续序列,知道遍历完,再输出这个最大的长度即可。

class Solution {
public:
    int longestConsecutive(vector& nums) {
        sort(nums.begin(),nums.end());//排序
        if(nums.size()==0)//长度为0时直接输出0,要不然会产生数组越界的错误
        return 0;
        else if(nums.size()==1)//长度为1时直接输出1,不然也会产生数组越界
        return 1;
        int ans=0;int temp=1;//ans用于记录最大长度,也是我们最后输出的值。temp记录当前连续序列的长度
        for(int i=0;ians)
				ans=temp;
				temp=1;
			}
            if(i==nums.size()-2)//遍历结束,一定要加上,不然序列到最后到满足连续条件的话最后一个子段时不会终止的
            {
                if(temp>ans)
				ans=temp;
				temp=1;
            }
		}
		return ans;
    }
};
这道题不知道出题者时想考察什么,虽然复杂度超了,但是好像时间上还超过了98%的人,有点难以理解。

你可能感兴趣的:(c++算法,个人)