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 
#include 
#include 
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;
}
  • 参考文章
    • 总感觉整的有点儿麻烦
      • C++ vector用法(详解!!函数,实现). 推荐
      • 整数序列中最长的连续序列个数(LeetCode-128)
      • C++标准库之vector(各函数及其使用全)

你可能感兴趣的:(leetcode,leetcode,最长连续序列,c++)