每日一题--最长连续序列

洛阳春-岑参

人到洛阳花似锦,偏我来时不逢春。

谁道三冬无春色,冰山高处万里银

目录

题目描述

思路分析

方法及其时间复杂度

法一 暴力枚举:

法二 哈希表遍历:

法三 并查集:

个人总结


题目描述

128. 最长连续序列 - 力扣(LeetCode) 

思路分析

先预处理排序,再枚举所有连续区间并计算长度,选择最大的连续区间最长的那个。

方法及其时间复杂度

法一 暴力枚举:

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        sort(nums.begin(),nums.end());//先排序数组
        int n=nums.size();
        if(n==1) return 1; //为了防止下标越界,特殊处理
        int ans=0,Maxn=1; //记录最后答案,和记录连续区间的长度
        for(int i=1;i<n;++i){
            while(i<n&&(nums[i]==nums[i-1]+1||nums[i]==nums[i-1])){ //进入连续区间
                if(nums[i]==nums[i-1]) i++; //数字相同时,下标加1
                else   Maxn++,i++; //不相同说明连续,则计数器加1,下标加1
            }
            ans=max(Maxn,ans);  //每一个连续区间结束,选择最大的连续区间数作为答案
            Maxn=1;  //重置计数为1
        }
        return ans;
    }
};

时间复杂度O(nlogn) 排序的时间nlogn,遍历时间复杂度O(n)

法二 哈希表遍历:

  将数组全部插入哈希表,然后遍历哈希表,如果当前数-1在哈希表中不存在,就设当前数为连续区间的起点,一直在哈希表中查找当前的下一个,找到计数器加1,直到找不到为止,在更新最大值作为答案。

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        unordered_set<int> hash(nums.begin(),nums.end());  //将所有数插入哈希表
        int ans=0;
        for(const auto& x:hash){  //遍历哈希表
            if(!hash.count(x-1)){  //如果该数-1没有在哈希表,可以作为起点
                int y=x+1;  
                while(hash.count(y)) y++; //一直查找下一个数,直到找不到为止
                ans=max(ans,y-x);  //取每个区间的最大长度
            }
            
        }
        return ans;
    }
};

时间复杂度O(n),空间复杂度O(n)

法三 并查集:

假定原数组中的每个元素都以自己本身为根的集合,且每个集合大小都是1。

遍历数组元素,如果集合中存在当前元素-1或+1则合并到一个集合中。最后返回集合最大那个大小

 

class Solution {
public:
    unordered_map<int,int> pre; 
    unordered_map<int,int> sz;
    int root(int x){
        while(pre[x]!=x) x=pre[x];  //循环找根节点
        return x;
    }
    void merge(int x,int y){  //启发式合并,合并两个集合
        x=root(x),y=root(y);
        if(x==y) return ;
        if(sz[x]>sz[y])swap(x,y);
        pre[x]=y;
        sz[y]+=sz[x];
    }
    int longestConsecutive(vector<int>& nums) {
        for(const auto& x:nums){
            if(!pre.count(x)) pre[x]=x,sz[x]=1;  //初始化并查集
            if(pre.count(x-1)) merge(x,x-1);    //如果存在x-1或x+1则合并
            if(pre.count(x+1)) merge(x,x+1);
        }
        int ans=0;
        for(const auto& t:sz){  //查找合并集合里最大的
            ans=max(ans,t.second);
        }
        return ans;
    }
};

 时间复杂度O(nlogn) 空间复杂度O(n)

个人总结

多日没刷题,又怀念刷题的感觉,今日重启每日一诗系列

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【网安小白成长之路】3.MySQL环境配置以及常用命令(增删改查)

&#x1f42e;博主syst1m 带你 acquire knowledge&#xff01; ✨博客首页——syst1m的博客&#x1f498; &#x1f51e; 《网安小白成长之路(我要变成大佬&#x1f60e;&#xff01;&#xff01;)》真实小白学习历程&#xff0c;手把手带你一起从入门到入狱&#x1f6ad; &…

Day53:WEB攻防-XSS跨站SVGPDFFlashMXSSUXSS配合上传文件添加脚本

目录 MXSS UXSS&#xff1a;Universal Cross-Site Scripting HTML&SVG&PDF&SWF-XSS&上传&反编译(有几率碰到) SVG-XSS PDF-XSS Python生成XSS Flash-XSS 知识点&#xff1a; 1、XSS跨站-MXSS&UXSS 2、XSS跨站-SVG制作&配合上传 3、XSS跨站-…

项目模块—实现抑郁测评(小程序)

script <script setup> import { ref } from "vue";//控制轮播图页码 let current ref(0);//答题逻辑 const add (value) > {if (current.value < 9) {current.value current.value 1;} else {uni.switchTab({url: "/pages/my/my",});} }…

「DevExpress中文教程」如何将DevExtreme JS HTML编辑器集成到WinForms应用

在本文中我们将演示一个混合实现&#xff1a;如何将web UI工具集成到WinForms桌面应用程序中。具体来说&#xff0c;我们将把DevExtreme JavaScript WYSIWYG HTML编辑器(作为DevExtreme UI组件套件的一部分发布的组件)集成到Windows Forms应用程序中。 获取DevExtreme v23.2正式…

Vue3进阶教程-第2学堂小商城实战课程前言

该教程为进阶教程&#xff0c;如果你还不了解Vue3的基础知识&#xff0c;可以先前往Vue3基础教程&#xff0c;从入门到实战。 学习时遇到的任何疑问都欢迎在相应课文页面下方的问答区进行提问哦 我能学到什么&#xff1f; 编程写法千千万&#xff0c;实现需求是第一。 教程中…

阿里云服务器租用价格表-2024最新(附报价单)

2024年阿里云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网aliyunfuwuqi.com整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新…

数据结构——链表(练习题)

大家好&#xff0c;我是小锋我们继续来学习链表。 我们在上一节已经把链表中的单链表讲解完了&#xff0c;大家感觉怎么样我们今天来带大家做一些练习帮助大家巩固所学内容。 1. 删除链表中等于给定值 val 的所有结点 . - 力扣&#xff08;LeetCode&#xff09; 我们大家来分…

登录拦截器

目录 &#x1f388;1.登陆拦截器的使用 &#x1f38a;2.ThreadLocal的简单使用 &#x1f383;3.登录拦截器拦截和放行配置 1.登陆拦截器的使用 创建一个拦截器类&#xff0c;必须让其实现HandlerInterceptor接口 1.获取前端的token 2.判断token是否为空 3.若为空&#xff…

蓝桥杯基础练习详细解析(四)——Fibonacci费伯纳西数列(题目分析、代码实现、Python)

试题 基础练习 Fibonacci数列 提交此题 评测记录 资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 Fibonacci数列的递推公式为&#xff1a;FnFn-1Fn-2&#xff0c;其…

CI/CD实战-jenkins结合ansible

配置主机环境 在jenkins上断开并删除docker1节点 重新给master添加构建任务 将server3&#xff0c;server4作为测试主机&#xff0c;停掉其上后面的docker 在server2&#xff08;jenkins&#xff09;主机上安装ansible 设置jenkins用户到目标主机的免密 给测试主机创建用户并…

swagger/knife4j 接口文档增加图标 springboot

1.在资源目录下增加图标文件 2.配置/favicon.ico 资源 Configuration public class WebConfig implements WebMvcConfigurer {Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/favicon.ico").addResour…

小程序利用WebService跟asp.net交互过程发现的问题并处理

最近在研究一个项目&#xff0c;用到asp.net跟小程序交互&#xff0c;简单的说就是小程序端利用wx.request发起请求。获取asp.net 响应回来的数据。但经常会报错。点击下图的测试按钮 出现如下错误&#xff1a; 百思不得其解&#xff0c;试了若干方法&#xff0c;都不行。 因为…

axios发送get请求但参数中有数组导致请求路径多出了“[]“的处理办法

一、情况 使用axios发送get请求携带了数组参数时&#xff0c;请求路径中就会多出[]字符&#xff0c;而在后端也会报错 二、解决办法 1、安装qs 当前项目的命令行中安装 npm install qs2、引入qs库(使用qs库来将参数对象转换为字符串) // 全局 import qs from qs Vue.proto…

Vite 为什么比 Webpack 快?

目录 1. Webpack 的构建原理 2. Script 的模块化&#xff08;主流浏览器对 ES Modules 的支持&#xff09; 3. Webpack vs Vite 开发模式的差异 对 ES Modules 的支持 底层语言的差异 热更新的处理 1. Webpack 的构建原理 前端之所以需要类似于 Webpack 这样的构建工具&…

智慧工地安全生产与风险预警大平台的构建,需要哪些技术?

随着科技的不断发展&#xff0c;智慧工地已成为现代建筑行业的重要发展趋势。智慧工地方案是一种基于先进信息技术的工程管理模式&#xff0c;旨在提高施工效率、降低施工成本、保障施工安全、提升施工质量。一般来说&#xff0c;智慧工地方案的构建&#xff0c;需要通过集成物…

kubernetes(K8S)学习(一):K8S集群搭建(1 master 2 worker)

K8S集群搭建&#xff08;1 master 2 worker&#xff09; 一、环境资源准备1.1、版本统一1.2、k8s环境系统要求1.3、准备三台Centos7虚拟机 二、集群搭建2.1、更新yum&#xff0c;并安装依赖包2.2、安装Docker2.3、设置hostname&#xff0c;修改hosts文件2.4、设置k8s的系统要求…

【IP 组播】PIM-SM

目录 原理概述 实验目的 实验内容 实验拓扑 1.基本配置 2.配置IGP 3.配置PIM-SM 4.用户端DR与组播源端DR 5.从RPT切换到SPT 6.配置PIM-Silent接口 原理概述 PIM-SM 是一种基于Group-Shared Tree 的组播路由协议&#xff0c;与 PIM-DM 不同&#xff0c;它适合于组播组成…

SpringMVC第一个helloword项目

文章目录 前言一、SpringMVC是什么&#xff1f;二、使用步骤1.引入库2.创建控制层3.创建springmvc.xml4.配置web.xml文件5.编写视图页面 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; SpringMVC 提示&#xff1a;以下是本篇文章正文内容&#xf…

如何创建纯净版Django项目并启动?——让Django更加简洁

目录 1. Django的基本目录结构 2. 创建APP 2.1 创建app 2.2 配置文件介绍 3. 迁移数据库文件 3.2 连接数据库 3.1 创建迁移文件 3.2 同步数据库 4. 纯净版Django创建 4.1 剔除APP 4.2 剔除中间件 4.3 剔除模板引擎 5. 最终 1. Django的基本目录结构 在我们创建Django项…

吴恩达机器学习笔记 三十 什么是聚类 K-means

聚类(clustering)是一种无监督学习算法&#xff0c;关注多个数据点并自动找到相似的数据点&#xff0c;在数据中找到一种特定的结构。无监督学习算法的数据集中没有标签 y &#xff0c;所以不能说哪个是“正确的 y ”。 K-means算法 K-means算法就是在重复做两件事&#xff1a…