Leetcode:128. 最长连续序列

128. 最长连续序列
在这里插入图片描述
乍一看感觉很简单,一看要用O(n)???
因为我觉得题目很难而且题目看起来很简单,感觉以后会用到😆,做个记录

1.朴素做法

  • 思路
    :任何一段连续的数都有一个左端点:比如(1,2,3,4)的左端点是1,且找到1之后,发现(1,2,3,4)为最长的连续区间,那么从2,3,4为左端点的区间都不需要继续尝试了,因为他们都比1为左端点的区间短。
    那么我们只需要找所有的左端点,然后不停比较更新即可。
    • 怎么找左端点?只要没有比它更小的数,那么就是左端点:比如[100,1,3,2,4],这个数组有两个左端点:100,1。
    • 用哈希表空间换时间,这样就不需要每次找到一个数,然后去for循环判断有没有比他小的数以及他后面接着几个连续的数
class Solution 
{
public:int longestConsecutive(vector<int>& nums) {int n=nums.size();unordered_set<int>Hash;  //set只有一个参数,然后去重,重复的键值不会被插入for(int i=0;i<n;i++)Hash.insert(nums[i]);int ans=0;for(int i=0;i<n;i++){if(Hash.find(nums[i]-1)!=Hash.end())//num[i]-1存在,nums[i]不是左端点continue;else{int x=nums[i]+1;  //nums[i]是左端点,从x开始尝试找int len=1;while(Hash.find(x)!=Hash.end()){x++;len++;}ans=max(ans,len);}}return ans;}
};

2.并查集

  • 思路
    将连接在一起的数放在一个集合,且这个集合的根节点是当前集合最大的数
    • 这里也用到左端点的思路,而且优化了并查集,一步到位。
class Solution {
public:unordered_map<int,int> a;int find(int x)   //找到该元素集合的根节点+路径压缩{if(a.count(x)){a[x]=find(a[x]);return a[x];}elsereturn x;//return a.count(x)?a[x]=find(a[x]):x;}int longestConsecutive(vector<int>& nums) {for(auto i:nums)  //这一步很巧妙,这个错位的赋值使find函数一步到位,只要使连续的,那么就把所有连续的数都放在集合里了。a[i]=i+1;int ans=0;for(auto i:nums){int y=find(i+1);ans=max(ans,y-i);}return ans;}
};

3.动态规划

  • 思路:
    最终求的是最长的连续数组,那么可以把解分解成:左连续区间+当前元素+右连续区间,这很明显是符合逻辑的。那么把解拆分成这个形式,那么就去尝试迭代这个公式。
    • 迭代过程中,连续数组的长度是从1开始递增的,且每次迭代都会更新一段数组的左右端点,比如: 1 2 3 4 6 7 8,遍历到5,那么Hash[5]=4+1+3,Hash[1]=8,Hash[8]=8;
class Solution 
{
public:int longestConsecutive(vector<int>& nums){unordered_map<int , int>Hash;int res = 0;for(int i = 0; i < nums.size(); i++) {int now = nums[i];if(!Hash[now]) {int left = Hash[now - 1] , right = Hash[now + 1];int len = left + right + 1;res = max(res , len);Hash[now] = len;Hash[now - left] = len , Hash[now + right] = len;}}return res;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/631249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android车载系统Car模块架构链路分析

一、模块主要成员 CarServiceHelperService SystemServer 中专门为 AAOS 设立的系统服务&#xff0c;用来管理车机的核心服务 CarService。该系统服务的具体实现在 CarServiceHelperServiceUpdatableImpl CarService Car模块核心服务APP&#xff0c;Android 13版本开始分为…

Qt纯代码实现UI界面

1.相关信息 设置编辑框内容的字体样式&#xff0c;包括加粗、下划线、斜体、蓝色、红色、黑色 2.界面展示 3.相关代码 #include "dialog.h" #include <QHBoxLayout> #include <QVBoxLayout> #include <QCheckBox> #include <QRadioButton> …

commvault学习(5):在linux上安装cv客户端

我的环境&#xff1a; 服务器&#xff08;同时装有CS、MA&#xff09;&#xff1a;windows server2008r2 客户端&#xff1a;两台centos7 1.为两台centos7配置静态ip 使得2者可以与服务器ping通 2.在两台centos7上预留出足够大的磁盘空间以存放安装文件 我是在/mnt下创建了…

软件测试|使用matplotlib绘制箱型图

简介 绘制箱型图&#xff08;Box Plot&#xff09;是一种常用于可视化数据分布的方法&#xff0c;它可以显示数据的中位数、四分位数、异常值等统计信息。Matplotlib 是一个强大的 Python 数据可视化库&#xff0c;可以轻松绘制箱型图。在本文中&#xff0c;我们将介绍如何使用…

推荐五款超好用的AI写作自动生成器给你

随着人工智能技术的不断发展&#xff0c;AI写作自动生成器成为了现代写作的新宠。这些智能工具能够帮助我们快速生成高质量的文章&#xff0c;节省时间和精力。在本文中&#xff0c;我将向大家推荐五款超好用的AI写作自动生成器&#xff0c;希望能够为你的写作工作带来便利和效…

服务器数据恢复—OceanStor存储raid5热备盘同步数据失败的数据恢复案例

服务器数据恢复环境&#xff1a; 华为OceanStor某型号存储&#xff0c;存储内有一组由24块硬盘组建的raid5阵列&#xff0c;配置1块热备盘。 服务器故障&#xff1a; 该存储raid5阵列中有一块硬盘离线&#xff0c;热备盘自动激活并开始同步数据&#xff0c;在热备盘同步数据的…

Docker(一)简介和基本概念

一、简介 本章将带领你进入 Docker 的世界。 什么是 Docker&#xff1f; 用它会带来什么样的好处&#xff1f; 好吧&#xff0c;让我们带着问题开始这神奇之旅。 1.什么是 Docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目&…

【文档数据库】ES和MongoDB的对比

目录 1.由文档存储牵出的问题 2.什么是MongoDB&#xff1f; 3.ES和MongoDB的对比 1.由文档存储牵出的问题 本文或者说关于mongodb的这个系列文章的源头&#xff1a; 前面我们聊过了分布式链路追踪系统&#xff0c;在基于日志实现的分布式链路追踪的方式seluthzipkin中为了…

mysql常见的需求,对于关键字的使用

如何使用MySQL将列数据转化为逗号分隔的形式。我们可以使用内置函数GROUP_CONCAT()来实现这个功能 如何使用MySQL将列数据转化为逗号分隔的形式。我们可以使用内置函数GROUP_CONCAT()来实现这个功能&#xff0c;也可以根据实际需求自定义一个函数。这种技术在一些需要对数据进…

Qlib+backtrader:2014.1.1-2023.9.20最新回测结果,可以实盘吗?

今年以来&#xff0c;在研究了qlib和backtrader的基础上&#xff0c;把二者结合起来进行了一个策略研究。简单说就是用qlib在200只股票的股票池中进行滚动训练与预测&#xff08;walk forward&#xff09;&#xff0c;总体数据范围是2005到2023年&#xff0c;以20日间隔滚动训练…

寒假冬令营(算法编程)

1月18日&#xff08;二分&#xff09; 题目描述&#xff08;一&#xff09; 278. 第一个错误的版本 你是产品经理&#xff0c;目前正在带领一个团队开发新的产品。不幸的是&#xff0c;你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的&#xff0…

OpenGL:关于纹理映射时任意四边形中的插值问题(二)

OpenGL&#xff1a;关于纹理映射时任意四边形中的插值问题-CSDN博客 上次是使用逆双线性插值的方法解决四边形纹理映射时产生的折痕问题。 其实也有点问题&#xff0c;就是双线性插值会使得纹理产生一点扭曲。 不是投影的效果。 想达到纹理投影的效果&#xff0c;可以使用透…

CentOS查看修改时间

经常玩docker的朋友应该都知道&#xff0c;有很多的镜像运行起来后&#xff0c;发现容器里的系统时间不对&#xff0c;一般是晚被北京时间8个小时&#xff08;不一定&#xff09;。 这里合理怀疑是镜像给的初始时区是世界标准时间&#xff08;也叫协调世界时间&#xff09;。 有…

C++ 之LeetCode刷题记录(十二)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 依旧是追求耗时0s的一天。 69. x 的平方根 示例 1&#xff1a; 输入&#xff1a;x 4 输出&#xff1a;2 示例 2&#xff1a; 输入&#x…

品牌全球化:关于跨界合作的探索与解析

在全球化的时代背景下&#xff0c;品牌出海已经成为企业发展的重要战略之一。然而&#xff0c;面对文化差异、市场竞争和消费者需求等多重挑战&#xff0c;品牌如何成功地打入海外市场&#xff0c;是许多企业面临的难题。跨界合作作为一种新兴的商业模式&#xff0c;正逐渐成为…

一、Flask学习之HTML

一、Flask学习之HTML 1.运行简单页面 首先需要搭建环境&#xff1a; pip install flaskfrom flask import Flaskapp Flask(__name__)# 创建了网址 /show/info 和函数index之间的对应关系&#xff0c;以后用户在浏览器上访问/show/info&#xff0c;网站自动执行index函数 ap…

POI和EasyExcel学习

1.POI 1.1POI简介 在Java中&#xff0c;POI是指Apache POI&#xff08;Poor Obfuscation Implementation&#xff09;&#xff0c;它是一个开源的Java库&#xff0c;用于处理Microsoft Office文档格式文件&#xff0c;如Excel、Word、PowerPoint等。POI提供了一组API&#xf…

如何在CentOS下使用Docker部署Halo博客网站并结合内网穿透远程访问

文章目录 ⛳️ 推荐1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可参考已安装Docker步骤&#xff1a;1.2 在Docker中部署Halo 2. Linux安装Cpolar2.1 打开服务器防火墙2.2 安装cpolar内网穿透 3. 配置Halo个人博客公网地址4. 固定Halo公网地址 ⛳️ 推荐 前些天发现了…

记一次 .NET某道闸收费系统 内存溢出分析

一&#xff1a;背景 1. 讲故事 前些天有位朋友找到我&#xff0c;说他的程序几天内存就要爆一次&#xff0c;不知道咋回事&#xff0c;找不出原因&#xff0c;让我帮忙看一下&#xff0c;这种问题分析dump是最简单粗暴了&#xff0c;拿到dump后接下来就是一顿分析。 二&…

Openwrt 下动态路由协议(quagga-OSPF)配置与验证

文章目录 前言网络拓扑静态路由方式动态路由方式Openwrt下 Quagga 安装Quagga 配置R1路由器zebra配置R1路由器ospf配置R2路由器zebra配置R2路由器ospf配置OSPF协议分析REF本文将在两台openwrt系统上安装配置quagga, 搭建一套完整环境,来验证OSPF动态路由的基本功能和实际效果,…