题目如下:
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
解题思路:
首先对数组进行排序,而后利用for循环bian遍历整个数组,查找最长连续序列
代码如下:
class Solution {
public:
int longestConsecutive(vector<int>& nums){
int i,j,n,temp,cnt=1,sum=0,Longi=0;
n=size(nums)/sizeof(nums[0]);
for(i=0;i<n;i++){
for(j=0;j<n-1;j++){
if(nums[j]>nums[j+1]){
temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
i=0;
while(i<n){
for(j=i;j<n;j++){
if(nums[j+1]-nums[j]==1){
sum+=1;
if(sum>cnt){
Longi=i;
cnt=sum;
}
}else{
i=j-1;
sum=0;
break;
}
}
i++;
}
return cnt;
}
};
运行显示超时,这里使用的是冒泡排序法,时间复杂度是0(n^2),应改为使用快速排序法,时间复杂度为0(nlog2(n))。