leetcode-128. 最長連續序列刷題筆記(c++)

寫在前面

  • 簡單的邏輯一些文章非要寫的很複雜,
  • 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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章