寫在前面
- 簡單的邏輯一些文章非要寫的很複雜,
- c++通過變量定義數組長度並初始化,貌似不太方便
- 隔1段時間不敲代碼,思維跟不上,,,
- ε=(´ο`*)))唉,幾乎沒時間研究新技術了,,,
題目詳情
- 空間換時間思想
- 定義大數組,初始化爲0,循環遍歷索引存在賦值1
- 遍歷輸入數組,不連續爲1則局部更新變量
給定一個未排序的整數數組,找出最長連續序列的長度。
要求算法的時間複雜度爲 O(n)。
示例:
輸入: [100, 4, 200, 1, 3, 2]
輸出: 4
解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度爲 4。
輸入: [0, 0]
輸出: 1
ac代碼
- 解題思想
- vector數組升序排序
- 遍歷數組差值爲零進入下1次循環;差值不爲1,判斷是否需要更新局部變量值
- 末尾判斷是否需要更新局部變量值
- 注意第2個測試用例
class Solution
{
public:
int longestConsecutive(vector<int>& nums)
{
if(nums.size() == 0)
return 0;
sort(nums.begin(), nums.end());
int cnt = 1, pcnt = 1;
for(int i=1; i<nums.size(); i++)
{
if(nums[i] - nums[i-1] ==1)
pcnt++;
else if (nums[i] - nums[i-1] > 1)
{
if(pcnt>cnt)
cnt = pcnt;
pcnt = 1;
}
}
return pcnt>cnt ? pcnt: cnt;
}
};
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int longestConsecutive(vector<int>& nums)
{
if(nums.size() == 0)
return 0;
sort(nums.begin(), nums.end());
int cnt = 1, pcnt = 1;
for(int i=1; i<nums.size(); i++)
{
if(nums[i] - nums[i-1] ==1)
pcnt++;
else if (nums[i] - nums[i-1] > 1)
{
if(pcnt>cnt)
cnt = pcnt;
pcnt = 1;
}
}
return pcnt>cnt ? pcnt: cnt;
}
int main()
{
vector<int> vv;
vv.push_back(0);
vv.push_back(0);
vv.push_back(0);
vv.push_back(0);
int aa = longestConsecutive(vv);
cout << aa << endl;
return 0;
}