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

从零学算法128

128.给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
示例 1:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
示例 2:
输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

  • 这里就直接调 api 排序了,排序后最长连续序列在数组中就一定为连续的整数了。设 dp[i] 为以 nums[i] 结尾的子数组的最长序列,dp[i] 有两种情况,当 nums[i]=nums[i-1]+1 表示它能和前一个数组成连续的序列,就为 dp[i-1]+1,否则就没法连续, dp[i]=1。初始情况也很好理解,dp[0]=1 表示长度为 1 的数组无论如何存在连续序列长度为 1。
  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)
  •   public int longestConsecutive(int[] nums) {int n = nums.length;if(n == 0)return 0;Arrays.sort(nums);// 由于 dp 更新时只和前一个结果有关,所以不需要数组int dp = 1;int ans = dp;List<Integer> list = new ArrayList<>();// 去重,你也可以用一个变量记录前一个数// 这样也就不需要 list 了,空间复杂度将为 O(1)for(int i=0;i<n;i++){while(i<n-1 && nums[i]==nums[i+1])i++;list.add(nums[i]);}for(int i=1;i<list.size();i++){if(list.get(i)==list.get(i-1)+1)dp++;else dp=1;ans=Math.max(ans,dp);}return ans;}
    
  • 去重优化
  •   public int longestConsecutive(int[] nums) {int n = nums.length;if(n == 0)return 0;Arrays.sort(nums);int dp = 0;int ans = 0;int pre=nums[n-1]+1;for(int i=0;i<n;i++){while(i<n-1 && nums[i]==nums[i+1])i++;if(nums[i]==pre+1)dp++;else dp=1;pre=nums[i];ans=Math.max(ans,dp);}return ans;}
    
  • 还有用 set + 递归暴力解的:限定某个起点,从 set 中找连续的序列长度很容易,这里的计算用递归表示了。
  •   Set<Integer> set = new HashSet();public int longestConsecutive(int[] nums) {int n = nums.length;int ans = 0;if(n == 0)return ans;// set 去重Arrays.stream(nums).forEach(v->{set.add(v);});for(int x:set){// 如果有 x-1 那从 x-1 开始的长度肯定更长,所以跳过 xif(set.contains(x-1))continue;// 这就等于比较每个连续序列的长度ans = Math.max(ans,dfs(x,0));}return ans;}// 计算从 x 开始的最长序列长度int dfs(int x,int res){if(set.contains(x))return dfs(x+1,res+1);else return res;}
    

相关文章:

从零学算法128

128.给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums [100,4,200,1,3,2] 输出&#xff1a;4…...

2024免费mac苹果电脑的清理和维护软件CleanMyMac X

对于 Mac 用户来说&#xff0c;电脑的清理和维护是一件让人头疼的事情。但是&#xff0c;有了 CleanMyMac X&#xff0c;这一切都将变得轻松愉快。CleanMyMac X 是一款专为 Mac 设计的电脑清理软件&#xff0c;它以其强大的功能和简单的操作&#xff0c;让无数用户为之倾倒。 C…...

Python反射机制在实际场景中的应用

Python 的反射机制是指在运行时动态地访问、检测和修改类和对象的属性和方法。反射为开发者提供了一种灵活的方式来处理对象和类&#xff0c;可以在实际场景中提供一些有用的功能和应用&#xff0c;下面是 Python 反射在实际场景中的一些常见应用&#xff1a; 插件系统&#xf…...

网络原理初识

一、IP地址 概念 IP 地址主要用于标识网络主机、其他网络设备&#xff08;如路由器&#xff09;的网络地址。简单说&#xff0c; IP 地址用于定位主机 的网络地址 。 就像我们发送快递一样&#xff0c;需要知道对方的收货地址&#xff0c;快递员才能将包裹送到目的地。 二、…...

关于uniapp小程序的分包问题

开发uniapp小程序时&#xff0c;在打包上传代码时会出现超出2M的打包限制不能上传&#xff0c;那么我们该怎么做呢&#xff1f; 1.对于图片&#xff0c;将图片从后端服务取&#xff0c;尽量不要放在静态资源&#xff0c;图片体积会影响打包大小。 2.使用分包&#xff0c;tabb…...

MySQL:索引的优化方法

索引是帮助存储引擎快速获取数据的一种数据结构&#xff0c;形象的说就是索引是数据的目录。 索引创建的时机&#xff1a; 索引并不是越多越好的&#xff0c;虽然他再查询时会提高效率&#xff0c;但是保存索引和维护索引也需要一定的空间和时间成本的。 不创建索引&#xff1a…...

前后端分离vue+nodejs+mysql高校学生社团管理系统xgp16

系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对高校社团的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的思想&a…...

HCIA-Datacom实验指导手册:7 构建简单 IPv6 网络

HCIA-Datacom实验指导手册&#xff1a;7 构建简单 IPv6 网络 一、实验介绍&#xff1a;二、实验拓扑&#xff1a;三、实验目的&#xff1a;四、配置步骤&#xff1a;步骤 1 设备基础配置设备命名 步骤 2 配置设备及接口 IPv6 功能步骤 3 配置接口的 link-local 地址&#xff0c…...

ElasticSearch搜索引擎使用指南

一、ES数据基础类型 1、数据类型 字符串 主要包括: text和keyword两种类型&#xff0c;keyword代表精确值不会参与分词&#xff0c;text类型的字符串会参与分词处理 数值 包括: long, integer, short, byte, double, float 布尔值 boolean 时间 date 数组 数组类型不…...

mysql与oracle的区别

一、并发性并发性是oltp数据库最重要的特性&#xff0c;但并发涉及到资源的获取、共享与锁定。mysql:mysql以表级锁为主&#xff0c;对资源锁定的粒度很大&#xff0c;如果一个session对一个表加锁时间过长&#xff0c;会让其他session无法更新此表中的数据。虽然InnoDB引擎的表…...

JVM相关面试题及常用命令参数

JVM常用命令和参数 常用命令&#xff1a; jps&#xff1a;查看进程及其相关信息 jmap&#xff1a;用来生成dump文件和查看堆相关的各类信息的命令 jstat&#xff1a;查看jvm运行时的状态信息 jstack&#xff1a;查看jvm线程快照的命令 jinfo&#xff1a;查看jvm参数和动态修改…...

Material UI 5 学习01-按钮组件

Material UI 5 学习01-按钮组件 一、安装Material UI二、 组件1、Button组件1、基础按钮2、variant属性3、禁用按钮4、可跳转的按钮5、disableElevation属性6、按钮的点击事件onClick 2、Button按钮的颜色和尺寸1、Button按钮的颜色2、按钮自定义颜色3、Button按钮的尺寸 3、图…...

解决移除数字问题的两种方法:暴力法和使用栈

题目 给你一个以字符串表示的非负整数 num 和一个整数 k &#xff0c;移除这个数中的 k 位数字&#xff0c;使得剩下的数字最小。请你以字符串形式返回这个最小的数字 示例 1 &#xff1a; 输入&#xff1a;num "1432219", k 3 输出&#xff1a;"1219"…...

高校宣讲会管理系统|基于Springboot的高校宣讲会管理系统设计与实现(源码+数据库+文档)

高校宣讲会管理系统目录 目录 基于Springboot的高校宣讲会管理系统设计与实现 一、前言 二、系统功能设计 1、学生信息管理 2、企业信息管理 3、宣讲会管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …...

6_怎么看原理图之协议类接口之LCD笔记

首先想一想再前几篇文章讲的协议类的前提 1、双方约定好通信的协议 2、双方满足一定的时序要求 以上第二点又有一些要求&#xff1a; 1&#xff09;弄清2440在这个通信协议中&#xff0c;能设置哪些时序的值&#xff0c;这些值的含义是什么——2440手册 2&#xff09;弄清楚这…...

SpringCloud Alibaba 学习

一&#xff1a;SpringCloud Alibaba介绍 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服 务的必需组件&#xff0c;方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 依托 Spring Cloud Alibaba&…...

【ros2 control 机器人驱动开发】双关节多控制器机器人学习-example 4

【ros2 control 机器人驱动开发】双关节多控制器机器人学习-example 4 文章目录 前言一、创建controller相关二、测试运行测试forward_position_controller总结前言 本篇文章在上篇文章的基础上主要讲解双轴机器人驱动怎么编写机器人外部/内部(扭矩、压力)传感器数据反馈1,…...

Leetcode 3071. Minimum Operations to Write the Letter Y on a Grid

Leetcode 3071. Minimum Operations to Write the Letter Y on a Grid 1. 解题思路2. 代码实现 题目链接&#xff1a;3071. Minimum Operations to Write the Letter Y on a Grid 1. 解题思路 这一题思路上也是比较直接的&#xff0c;就是首先找到这个Y字符&#xff0c;然后…...

随想录算法训练营第五十一天|309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

309.最佳买卖股票时机含冷冻期 public class Solution {public int MaxProfit(int[] prices) {if(prices.Length<2){return 0;}int [,]dpnew int[prices.Length,4];dp[0,0]-prices[0];for(int i1;i<prices.Length;i){dp[i,0]Math.Max(dp[i-1,0],Math.Max(dp[i-1,3]-pric…...

【语言学习】std::transform函数

阅读llvm的这个提交时&#xff0c;发现了其中使用了一个函数std::transform&#xff08;原文对其进行了一层封装&#xff09; 如果不理解std::transform的三个参数的关系&#xff0c;就会对第三个参数的lambda表达式理解不了。其实&#xff0c;第三个参数的作用是提供给了一种…...

Java 面试高频题:通知平台整体架构一般怎么拆?

消息实时通知平台架构总览怎么搭&#xff1f;一次讲清渠道、模板、推送、回执、偏好与治理闭环 大家好&#xff0c;我是一名有 4 年工作经验的 Java 后端开发。 从第129天开始&#xff0c;我连续围绕消息实时通知系统写了整体设计、渠道抽象、模板中心、实时推送、异步投递、偏…...

D3KeyHelper:暗黑3终极宏工具完整指南 - 5分钟快速上手

D3KeyHelper&#xff1a;暗黑3终极宏工具完整指南 - 5分钟快速上手 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3KeyHelper是一款专为《暗黑破坏…...

NAS-FPN里的GP和Sum Cell到底怎么工作的?手把手图解MMCV源码实现

NAS-FPN中的GP与Sum Cell工作机制解析&#xff1a;从理论到MMCV源码实现 在目标检测领域&#xff0c;特征金字塔网络(FPN)已经成为处理多尺度目标的标配组件。然而传统FPN采用固定的人工设计结构&#xff0c;难以适应不同检测任务的需求。NAS-FPN通过神经网络结构搜索技术&…...

为什么我劝你放弃FLANN 1.9.2?聊聊源码编译那些坑与1.9.1版的真香选择

为什么FLANN 1.9.1才是开发者更明智的选择&#xff1a;深度解析编译陷阱与版本决策 在开源库的世界里&#xff0c;"最新版本"往往被默认为"最佳选择"&#xff0c;但FLANN 1.9.2却打破了这个常规认知。作为一名经历过无数次深夜调试的开发者&#xff0c;我必…...

基于RL78 MCU的低功耗声音采集系统设计与实现详解

1. 项目概述&#xff1a;一个基于RL78的低功耗声音采集系统最近在整理一个老项目的技术文档&#xff0c;正好翻出来一个挺有意思的案例&#xff1a;一个基于瑞萨RL78系列MCU的低功耗声音采集与显示系统。这个项目的核心目标很明确&#xff0c;就是实现一个能够长时间、稳定地采…...

qt风格创建子线程。继承自qthread的类,只有run函数里面才是子线程

...

稳定币深度解析:从技术内核到生态未来

稳定币深度解析&#xff1a;从技术内核到生态未来 引言 在加密货币世界剧烈波动的浪潮中&#xff0c;稳定币如同一座坚不可摧的桥梁&#xff0c;连接着传统金融与去中心化未来。它不仅是DeFi乐高积木中最关键的基座&#xff0c;更在跨境支付、元宇宙经济等前沿领域扮演着核心…...

C语言泛型编程与类型安全 - C11的高级特性

引言 C语言通常被认为不支持泛型编程,但实际上通过巧妙的设计模式和C11标准的新特性,我们可以在C语言中实现类型安全的泛型代码。 本文将深入讲解如何使用void指针、宏技巧和C11的_Generic关键字实现泛型编程,让你的代码更加灵活和可复用。 一、void指针泛型基础 1.1 vo…...

Person Blocker实战教程:10个创意用例教你玩转图片遮挡

Person Blocker实战教程&#xff1a;10个创意用例教你玩转图片遮挡 【免费下载链接】person-blocker Automatically "block" people in images (like Black Mirror) using a pretrained neural network. 项目地址: https://gitcode.com/gh_mirrors/pe/person-block…...

中控SCADA的VBS脚本玩不转了?试试用Python来“降维打击”,搞定复杂数据处理与模型调用

中控SCADA的VBS脚本玩不转了&#xff1f;试试用Python来“降维打击”&#xff0c;搞定复杂数据处理与模型调用 在工业自动化领域&#xff0c;中控SCADA系统长期扮演着数据采集与监控的核心角色。然而&#xff0c;当项目需求从简单的数据记录升级到需要复杂分析、预测性维护或实…...