我是靠谱客的博主 粗心口红,最近开发中收集的这篇文章主要介绍力扣2657-剑指offer II 119 : 最长连续子序列题目代码带注释考察知识点,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

力扣2657-剑指offer II 119 : 最长连续子序列

  • 题目
  • 代码带注释
  • 考察知识点
    • 1.vector容器的创建,添加容器的方法两种
    • 2.考察sort用法
    • 3.如何打印vector容器中的元素

题目

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

代码带注释

#include<bits/stdc++.h>
using namespace std;

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        int res = 0;
        vector<int> resArr_;
        int maxRes = 0;
        sort(nums.begin(),nums.end());
        int numsLen = nums.size();
        if(numsLen == 0) return 0;
        //如果此容器的数据个数不为零的话,其最长连续子序列至少是1
         res += 1 ;
        cout<<"numsLen:"<<numsLen<<endl; 
        for(vector<int>::iterator it = nums.begin();it != nums.end();it++){
            cout<<*it<<endl;
        }
        /**
         * @brief 核心部分
         * 1.因为是两个数之间的比较 那么循环的次数是 数据长度减去1
         * 2.如果相差1或者-1的情况下就把连续序列长度加1 -1是考虑 0 - 1的情况     
         * 3.如果相差为0 那么考虑 12333333456 的连续子序列中间插上了连续的数字 连续子序列长度不变
         * 4.不是以上的情况 那就把得到的结果先放进容器中 并且将这次的连续子序列长度改为1
         */
        for(int i = 0;i < numsLen - 1;i++){
            if((nums[i+1] - nums[i]) == 1 || (nums[i+1] - nums[i] == -1)) {
                cout<<"nums[i]:"<<nums[i]<<" nums[i+1]:"<<nums[i+1]<<endl;
                res++;
                cout<<"res: "<<res<<endl;
            }
            else if(nums[i+1] - nums[i] == 0){
                continue;
            }
            else{ 
                resArr_.push_back(res);
                res = 1;
            }
        }
        //最后需要把最新一次的连续子序列长度尾插进去容器中
        resArr_.push_back(res);
        //比较存在数组中最长连续子序列的大小
            sort(resArr_.begin(),resArr_.end());
        for(vector<int>::iterator it = resArr_.begin();it != resArr_.end();it++){
            cout<<"resarr:"<<*it<<endl;
        }
    return resArr_[resArr_.size() - 1];
    }
};

int main(){
    system("chcp 65001");
    vector<int> a;
    a.push_back(1);
    a.push_back(2);
    a.push_back(0);
    a.push_back(1);
    //[9,1,4,7,3,-1,0,5,8,-1,6]
    // a.push_back(100);
    // a.push_back(4);
    // a.push_back(200);
    // a.push_back(1);
    // a.push_back(3);
    // a.push_back(2);
    // a.push_back(9);
    // a.push_back(1);
    // a.push_back(4);
    // a.push_back(7);
    // a.push_back(3);
    // a.push_back(-1);
    // a.push_back(0);
    // a.push_back(5);
    // a.push_back(8);
    // a.push_back(-1);
    // a.push_back(6);
    Solution s1;
    int c = s1.longestConsecutive(a);
    cout<<c<<endl;
    // for(vector<int>::iterator it = c.begin();it != c.end();it++){
    //     cout<<*it;
    // }
    return 0;
}

考察知识点

1.vector容器的创建,添加容器的方法两种

第一种 vectorarr(n); 这样可以把arr当做固定长度的数组来用
第二种 vecto arr, arr.push_back(100) ;长度不固定 随意在容器的尾部插入
但是记住,使用arr[]访问容器时 下标零对应的是容器的首个元素而不是最新插入的元素

2.考察sort用法

sort(iterator beg, iterator end, _Pred);
// 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
// beg 开始迭代器
// end 结束迭代器
// _Pred 谓词

第一种 针对容器 可以使用

void myprint(int val)
{	
	cout<<val<" ";
}
 vecto<int>  v;
 /*添加元素*/
 //sort默认从小到大排序
 sort(v.begin(),v.end());
 for_each(v.begin(),v.end(),myprint);
 cout << endl;
  //从大到小排序
 sort(v.begin(),v.end(),greater<int>());
 for_each(v.begin(),v.end(),myprint);
 cout << endl;

3.如何打印vector容器中的元素

1.
    for(vector<int>::iterator it = nums.begin();it != nums.end();it++){
        cout<<*it<<endl;
    }
2.//注意 把vector<int>::iterator 定义一个迭代器指针类型的作用
vector<int>::iterator pbegin = v.begin();
vector<int>::iterator pend =v.end();
    while(pBegin != pEnd)
    {
        cout<<*pBegin<<endl;
        pBegin++;
    }
3.//使用算法中的函数
for_each(v.begin(),v.end(),myprint);

最后

以上就是粗心口红为你收集整理的力扣2657-剑指offer II 119 : 最长连续子序列题目代码带注释考察知识点的全部内容,希望文章能够帮你解决力扣2657-剑指offer II 119 : 最长连续子序列题目代码带注释考察知识点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部