当前位置: 首页 > news >正文

【letcod-c++】128.最长连续序列

一、题目

在这里插入图片描述

二、分析

第一想法是像“242字母异位词”那样用哈希数组,但是这个数组元素的范围比较广,元素又比较分散,用数组太浪费空间,不合适。
于是考虑用哈希set(unordered_set),这个时候忽然想到前几天学习到set它能自动排序且自动去重,非常合适用到这一题中。

set、mulltiset、unordered_set的区别:unordered_set: 底层是哈希,所以顺序是乱的由哈希函数决定,但查找效率高multiset和set:底层都是红黑树,插入时自动排序(默认按从小到大,也可以通过仿函数指定排序规则),适用于有序操作。这两个的区别是set自动去重,而multiset允许出现重复元素。

那么这一题如果能够元素排好序只需要通过前后两个元素的差值是否为1就可以判断是否连续,而且根据第二个例子,出现重复的元素时只能算一个,所以需要去重,那么综合来说,set容器是最合适的。

三、代码

class Solution {
public:
/*
set: 自动排序且自动去重
1.先遍历一遍把数组元素塞到set容器中,就可以得到一个从小到大排序且数字不重复出现的序列
2.遍历这个set序列,判断当前元素和她的前一个元素是不是相差1,是则连续,计数增加;不是则断开,保存最大值并计数归0
这样遍历一轮就可以得到最大值了。
*/int longestConsecutive(vector<int>& nums) {if(nums.size()==0) return 0;if(nums.size()==1) return 1;set<int> nums_new;for(int i=0;i<nums.size();i++){nums_new.insert(nums[i]);}//长度至少也是个1int maxLen=1;int currentLen=1;set<int>::iterator it=nums_new.begin();int leftnum=*it;it++;for(;it!=nums_new.end();it++){if(((*it)-leftnum)==1){currentLen++;}else{if(currentLen>maxLen) maxLen=currentLen;currentLen=1;}leftnum=*it;}if(currentLen>maxLen) maxLen=currentLen;return maxLen;}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Visual Studio Code中跟创建运行项目有关的几个终端命令
  • 代码随想录算法训练营第七天(二)|15.三数之和 18.四数之和
  • day17-权限管理
  • IDEA左下角不显示本地修改的localChanges信息-git
  • Oracle认证1Z0-071线上考试注意事项
  • 关于keil程序无法进入main函数问题
  • 未来已来:全方位掌握【人工智能】的系统学习路线
  • 基于JSP的列车票务信息管理系统
  • sql常用语法总结
  • 【Mysql】第四章 数据类型(数值+字符串+日期+enum+set)
  • 决策树可解释性分析
  • 【wsl】wsl + vscode 中使用 typora 打开 markdown 文件
  • 简单搭建dns服务器
  • 浅学 Pytorch
  • C++协助完成返回值优化
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • node.js
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Python打包系统简单入门
  • React as a UI Runtime(五、列表)
  • Service Worker
  • SpiderData 2019年2月16日 DApp数据排行榜
  • vue 个人积累(使用工具,组件)
  • - 概述 - 《设计模式(极简c++版)》
  • 搞机器学习要哪些技能
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 深入浅出webpack学习(1)--核心概念
  • 你对linux中grep命令知道多少?
  • ${ }的特别功能
  • (+4)2.2UML建模图
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (vue)页面文件上传获取:action地址
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (九)One-Wire总线-DS18B20
  • (六)vue-router+UI组件库
  • (十)c52学习之旅-定时器实验
  • (四) Graphivz 颜色选择
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (原)Matlab的svmtrain和svmclassify
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET 给NuGet包添加Readme
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET成年了,然后呢?
  • .NET大文件上传知识整理
  • .NET单元测试
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • /var/lib/dpkg/lock 锁定问题
  • @FeignClient注解,fallback和fallbackFactory