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

LeetCode热题100- 缺失的第一个正数【JavaScript讲解】

题目:在这里插入图片描述

解题一:

如果不考虑时间复杂度和空间复杂度的话,我们最先想到的办法是先将该数组进行排序和去重,将最初的res结果值设置为1;将然后进行遍历,如果第一项不为1,则返回1,否则根据遍历res++;遍历结束后发现每一项都符合要求则返回res的最终值。代码如下:

代码一:

/*** @param {number[]} nums* @return {number}*/
var firstMissingPositive = function(nums) {nums = Array.from(new Set(nums));nums.sort((a,b)=>a-b);let res = 1;for(let i = 0; i < nums.length;i++){if(nums[i] > 0){if(nums[i] != res){return res;}res++;}}return res;
};

‌sort函数的时间复杂度为O(n log n),空间复杂度为O(n)
‌new Set操作的时间复杂度是O(n),空间复杂度也是O(n)‌
以上代码并没有满足题目要求的时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

解题二:

我们这次使用了一个Set(numSet)来存储数组中出现过的正数。首先,我们遍历原数组nums,将每个在1到n范围内的正数添加到Set中。然后,我们再次遍历从1到n的每个数字,检查它是否在Set中出现过。如果找到一个没有出现过的数字,我们就返回它作为缺失的第一个正整数。如果所有1到n的数字都出现过,我们则返回n+1。

代码二:

/*** @param {number[]} nums* @return {number}*/
var firstMissingPositive = function(nums) {let numSet = new Set();let n = nums.length;for(let i = 0; i < n;i++){if(nums[i] > 0 && nums[i] <= n){numSet.add(nums[i]);}}for(let i = 1; i <= n;i++){if(!numSet.has(i)){return i;}}return n + 1;
};

但是我们使用了一个额外的Set来存储出现过的数字,所以这里的空间复杂度为O(n);时间复杂度是O(n),因为我们只遍历了数组两次,并且Set的查找和插入操作都是O(1)的。

解题三:

将所有负数、0 都变为 N + 1,我们只需要考虑1-n的数字
遍历每个数,如果该数 |x| 属于[1,N];把在 x-1 的位置的数加上一个负号
遍历完之后,如果全部数都是负数——答案就是 1+N,否则就是第一个正数的位置+1

代码三:

/*** @param {number[]} nums* @return {number}*/
var firstMissingPositive = function(nums) {let n = nums.length;for(let i = 0; i < n;i++){if(nums[i] <= 0) nums[i] = n + 1;}for(let i = 0; i < n;i++){let x = Math.abs(nums[i]);if(x >= 1 && x <= n){nums[x - 1] = nums[x - 1] < 0 ? nums[x - 1] : -nums[x - 1];}}for(let i = 0; i < n;i++){if(nums[i] >= 0) return i+1;}return n + 1;
};

此时就满足时间复杂度为o(n),空间复杂度为常数的代码了。此思路借鉴于力扣博主okkjoo,具体地址点击此处跳转。

当博主问朋友解决方案的时候,他二话不说的告诉我“用桶排啊!!”,于是,、、、、这篇文章到这里没有结束,,明天博主会尽快将桶排的方法补充上去,也欢迎小伙伴们在评论区留下你们的答案哦~~~~~

相关文章:

LeetCode热题100- 缺失的第一个正数【JavaScript讲解】

题目&#xff1a; 解题一&#xff1a; 如果不考虑时间复杂度和空间复杂度的话&#xff0c;我们最先想到的办法是先将该数组进行排序和去重&#xff0c;将最初的res结果值设置为1&#xff1b;将然后进行遍历&#xff0c;如果第一项不为1&#xff0c;则返回1&#xff0c;否则根…...

基于矢量轨道角动量波的透射超表面设计

摘 要&#xff1a;针对轨道角动量(Orbital Angular Momentum,OAM)在无线通信系统中相位奇点的问题,提出了一种产生矢量OAM波的透射超表面&#xff61;设计了一种超表面透射单元实现透射极化和相位的调控,并由此单元排布组成透射超表面&#xff61;采用透射超表面调控透射电磁波…...

全方位探索DeepSeek

目录 前言1. DeepSeek的基础功能与应用场景2. 使用DeepSeek的多种方式2.1 通过Web界面快速体验2.2 调用API实现自动化处理2.3 集成到本地开发环境2.4 结合第三方工具扩展功能 3. 高效使用DeepSeek的进阶技巧3.1 参数调优与性能优化3.2 数据处理与结果分析 4. 实际案例分析与应用…...

详解Redis数据结构(附源码)

引言 只有弄明白Redis数据结构&#xff0c;才能理解它如此快速的原因&#xff0c;并不只是它存储于内存&#xff0c;本篇文章将拆开Redis数据结构分析它高效的原因 字符串&#xff08;String&#xff09; 基本概念&#xff1a;字符串是 Redis 中最基本的数据结构&#xff0c;…...

基于Flask的茶叶销售数据可视化分析系统设计与实现

【FLask】基于Flask的茶叶销售数据可视化分析系统设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统的创新之处在于系统不仅提供了基础的图表展示&#xff0c;如价格分布、付款分…...

基于推荐算法的在线课程推荐系统设计与实现

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

计时器任务实现(保存视频和图像)

下面是一个简单的计时器任务实现&#xff0c;可持续地每秒保存一幅图像&#xff0c;也可持续地每60秒保存一个视频&#xff0c;图像和视频均以当前时间命名&#xff1a; TimerTask类的实现如下&#xff1a; class TimerTask { public:TimerTask(const std::string& path):…...

FreeRTOS第3篇:链表的“精密齿轮”——列表与列表项

文章目录 1 列表与列表项:FreeRTOS的“排队系统”2 列表操作:FreeRTOS的“排队算法”3 列表的应用场景:FreeRTOS的“任务调度枢纽”4 源码级洞察:列表的“灵魂代码”5 实战:列表操作实验6 总结与思考引言:嵌入式系统的“任务候车厅” 想象你正在管理一座繁忙的火车站:乘…...

Linux(ubuntu)下载ollama速度慢解决办法

国内安装Ollama都很慢&#xff0c;因为一直卡在下载中&#xff0c;直接通过官网的链接地址下载方法&#xff1a; curl -fsSL https://ollama.com/install.sh | sh速度大概是10min下载1%&#xff0c;完全不能接受啊&#xff01; 其中很好的一个加速方式是通过使用github文件加速…...

【Java】分布式锁Redis和Redisson

https://blog.csdn.net/weixin_44606481/article/details/134373900 https://www.bilibili.com/video/BV1nW421R7qJ Redis锁机制一般是由 setnx 命令实现&#xff0c;set if not exists&#xff0c;语法setnx key value&#xff0c;将key设置值为value&#xff0c;如果key不存在…...

网络编程-

文章目录 网络编程套接字UDP/TCP的api使用 网络编程套接字 socket&#xff0c;是操作系统给应用程序&#xff08;传输层给应用层&#xff09;提供的api&#xff0c;Java也对这个api进行了封装。 socket提供了两组不同的api&#xff0c;UDP有一套&#xff0c;TCP有一套&#x…...

DeepSeek助力学术论文写作[特殊字符]

宝子们&#xff0c;还在为学术论文写作发愁吗&#xff1f;DeepSeek来帮你&#xff01;只要用对提示词&#xff0c;它就能变成你写作路上的超级助手。今天就来给大家分享一些超好用的提示词&#xff0c;助力学术论文写作&#xff0c;让你的论文在ChatGPT的辅助下闪闪发光✨。 一…...

从零创建DeepSeek:技术路径与实践探索

import tensorflow as tf摘要&#xff1a;本文详细阐述了从零开始创建DeepSeek的全过程&#xff0c;涵盖从项目启动的构思&#xff0c;到技术选型的考量&#xff0c;再到模型训练的精细操作&#xff0c;以及系统集成、测试优化和部署上线的各个环节。通过对这些步骤的深入解析&…...

MySQL技术公开课:Mysql-Server-8.4.4 Innodb 集群搭建与维护

MySQL技术公开课 - Mysql-Server-8.4.4 Innodb 集群搭建与维护 讲课内容&#xff1a; 1、Innodb集群框架介绍 2、Innodb集群部署(mysql-Server、mysql-shell、mysql-router安装配置) 3、Innodb集群维护(主备切换、启动与关闭、故障排除) Mysql-server商业版目前最新的是8.…...

VS Code User和System版区别【推荐使用System版本】and VSCode+Keil协同开发之Keil Assistant

VS Code User和System版区别 Chapter1 VS Code User和System版区别1. 对于安装而言2. 结束语 Chapter2 VS Code 安装、配置教程及插件推荐插件&#xff1a; Chapter3 VSCodeKeil协同开发之Keil Assistant1. 效果展示2. Keil Assistant简介3. Keil Assistant功能特性4. 部署步骤…...

动态规划两个数组dp问题系列一>最长重复子数组

目录 状态表示&#xff1a;状态转移方程&#xff1a;初始化&#xff1a;填表顺序&#xff1a;返回值&#xff1a;代码呈现&#xff1a; 状态表示&#xff1a; 状态转移方程&#xff1a; 初始化&#xff1a; 填表顺序&#xff1a; 返回值&#xff1a; 这里是以某一个位置为结尾定…...

在SpringBoot中使用UniHttp简化天地图路径规划调用实践

目录 写在最前面 前言 一、天地图路径规划简介 1、天地图相关服务 2、天地图路径规划接口 二、UniHttp简介 1、UniHttp是什么&#xff1f; 2、UniHttp能做什么&#xff1f; 三、UniHttp调用天地图接口 1、请求接口的定义 2、实际调用 3、相应结果展示 四、总结 写在…...

springboot与Freemarker

1 基本使用 1.1 介绍 FreeMarker 是一款模板引擎&#xff1a; 即一种基于模板和要改变的数据&#xff0c;并用来生成输出文本(HTML网页&#xff0c;电子邮件&#xff0c;配置文件&#xff0c;源代码等)的通用工具。 是一个Java类库。 FreeMarker 被设计用来生成 HTML Web 页面…...

CMake无法生成可执行文件,一直生成库文件

CMakeLists的内容如下&#xff0c;一直生成的main是库文件&#xff0c;而不是可执行文件。本人是在进行鸿蒙的交叉编译的时候遇到&#xff0c;归结为cmake属性的差异。原内容如下&#xff1a; # 设置最低CMake版本要求 cmake_minimum_required (VERSION 2.8.0)# 设置项目名称 …...

PrimeFaces实战:IdleMonitor与Ajax的完美结合

在现代的Web开发中&#xff0c;用户交互的实时反馈是一个重要的用户体验环节。PrimeFaces作为一个强大的Java EE UI库&#xff0c;提供了许多便捷的功能组件&#xff0c;其中之一就是IdleMonitor。通过IdleMonitor&#xff0c;我们可以轻松地检测用户何时处于空闲状态以及何时从…...

搭建一个经典的LeNet5神经网络

第一章&#xff1a;计算机视觉中图像的基础认知 第二章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(一) 第三章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(二) 第四章&#xff1a;搭建一个经典的LeNet5神经网络 一、LeNet-5背景 LeNet-…...

Transformer多头注意力并行计算原理与工业级实现:从数学推导到PyTorch工程优化

一、核心数学原理剖析 1.1 多头注意力矩阵分解 Q XW^Q ∈ R^{nd_k} K XW^K ∈ R^{nd_k} V XW^V ∈ R^{nd_v} 多头分解公式&#xff1a; head_i Attention(QW_i^Q, KW_i^K, VW_i^V) 其中 W_i^Q ∈ R^{d_kd_k/h}, W_i^K ∈ R^{d_kd_k/h}, W_i^V ∈ R^{d_vd_v/h} (h为头数…...

OpenAI 的变化对行业意味着什么?

哎呀&#xff0c;中国AI的发展可是搅动了一番风云。害怕自己正在失去对 AI 话语权的掌控&#xff0c;OpenAI 决定是时候全力出击了。 除了最近意外发布的 o3-mini 模型之外&#xff0c;Sam Altman 昨天还宣布了接下来几周/几个月的路线图&#xff0c;而这些变化相当显著&#…...

LinkedList

一.IDEA的链表库 IDEA上实现链表的包&#xff0c;实现的是无头双向不循环链表&#xff1a;&#xff08;并且这个链表有头尾节点&#xff09; 二.自己实现一个无头双向不循环链表 1.创建链表的类&#xff0c;在链表内中定义一个节点的内部类&#xff0c;并且在链表的类中定义头…...

半遮挡检测算法 Detecting Binocular Half-Occlusions

【1. 背景】&#xff1a; 本文分析【Detecting Binocular Half-Occlusions&#xff1a;Empirical Comparisons of Five Approaches】Geoffrey Egnal和Richard P. Wildes于2002年发表在IEEE Transactions on Pattern Analysis and Machine Intelligence上&#xff0c;这是1篇中…...

零基础购买阿里云服务器,XShell连接云服务器

目录 1.环境搭建方式 2. 使用云服务器 3.使用终端软件登录到Linux 4.使用XShell登录主机 5.连接失败的原因&#xff1a; 下一篇更新&#xff1a;Linux的基础指令以及如何Linux的环境搭建 1.环境搭建方式 主要有四种: 1.直接安装在物理机上&#xff0c;虽然Linux有图形化…...

Mac ARM 架构的命令行(终端)中,删除整行的快捷键是:Ctrl + U

在 Mac ARM 架构的命令行&#xff08;终端&#xff09;中&#xff0c;删除整行的快捷键是&#xff1a; Ctrl U这个快捷键会删除光标所在位置到行首之间的所有内容。如果你想删除光标后面的所有内容&#xff0c;可以使用&#xff1a; Ctrl K这两个快捷键可以帮助你快速清除当…...

ESP学习-1(MicroPython VSCode开发环境搭建)

下载ESP8266固件&#xff1a;https://micropython.org/download/ESP8266_GENERIC/win电脑&#xff1a;pip install esptools python.exe -m pip install --upgrade pip esptooo.py --port COM5 erase_flash //清除之前的固件 esptool --port COM5 --baud 115200 write_fla…...

微信小程序性能优化

微信小程序的性能优化是提升用户体验的关键。以下是一些常见的优化策略和技巧&#xff1a; 1. 减少 setData 的调用频率和数据量 setData 是小程序中更新视图的主要方式&#xff0c;但频繁调用或数据量过大会导致性能问题。 减少调用频率&#xff1a;避免在短时间内多次调用…...

五十天精通硬件设计第31天-阻抗

系列文章传送门 50天精通硬件设计第一天-总体规划-CSDN博客 目录 1. 核心概念:特性阻抗 2. 阻抗不匹配的后果 3. 关键影响因素 4. 阻抗匹配方法 5. 设计实践要点 6. 工具与测试 7. 常见问题解决 总结 信号完整性中的阻抗问题主要涉及传输线的特性阻抗匹配,是确保高…...

docker部署dify结合deepseek构建知识库

序 本文主要研究一下本地docker部署dify结合deepseek构建知识库 步骤 dify git clone https://github.com/langgenius/dify.git git co tags/0.15.3 -b 0.15.3 cd docker cp .env.example .env docker-comopse up启动之后访问localhost docker-comopse.yaml # # WARNING…...

11.C语言 malloc() calloc() realloc()分配内存

目录 malloc 好处 坏处 总结 calloc 参数说明 作用 与 malloc 的区别 示例 优点 缺点 总结 realloc 参数说明 作用 示例 优点 缺点 注意事项 总结 总结区别 对比表格 malloc 函数功能&#xff1a;分配内存给 void* malloc(size_t size); 来看一下deep…...

可信大模型:LLM + 神经符号推理,解决复杂推理任务

可信大模型&#xff1a;LLM 神经符号推理&#xff0c;解决复杂推理任务 论文大纲一、Why&#xff1a;研究要解决的现实问题二、What&#xff1a;核心发现或论点三、How&#xff1a;研究的整体方法与关键细节3.1 前人研究的局限性3.2 创新方法/视角3.3 关键数据或实验支持3.4 可…...

基于大数据的全国热门旅游景点数据分析系统的设计与实现

【大数据】基于大数据的全国热门旅游景点数据分析系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统主要包括登录注册、系统首页、图表分析、数据管理和个人信息五大功能模…...

Moya 网络框架

Moya 网络框架 定义enum类型&#xff0c;有多种接口就定义多少种&#xff0c;然后实现TargetType协议 import Foundation //导入网络框架 import Moyaenum DefaultService {//广告列表case ads(position : Int)case sheets(size:Int)case sheetDetail(data: String)case regi…...

【环境安装】重装Docker-26.0.2版本

【机器背景说明】Linux-Centos7&#xff1b;已有低版本的Docker 【目标环境说明】 卸载已有Docker&#xff0c;用docker-26.0.2.tgz安装包安装 1.Docker包下载 下载地址&#xff1a;Index of linux/static/stable/x86_64/ 2.卸载已有的Docker 卸载之前首先停掉服务 sudo…...

std::ranges::set_intersection set_union set_difference set_symmetric_difference

std::ranges::set_intersection&#xff1a;是 C20 引入的一个算法&#xff0c;用于计算两个已排序范围的交集。它将两个范围的交集元素复制到输出范围中。 std::ranges::set_intersection 用于计算两个已排序范围的交集。它将两个范围的交集元素复制到输出范围中。 注意事项…...

消息中间件深度剖析:以 RabbitMQ 和 Kafka 为核心

在现代分布式系统和微服务架构的构建中&#xff0c;消息中间件作为一个不可或缺的组件&#xff0c;承担着系统间解耦、异步处理、流量削峰、数据传输等重要职能。尤其是在面临大规模并发、高可用性和可扩展性需求时&#xff0c;如何选择合适的消息中间件成为了开发者和架构师们…...

笔试题笔记#6 模拟三道题和总结知识

两小时快乐模拟&#xff0c;最终三百分耻辱下播&#xff0c;&#xff08;刷的题三道一组&#xff0c;时长两小时&#xff0c;第一题100分&#xff0c;第二题200分&#xff0c;第三题300分&#xff09;&#xff0c;第三题完全想错了&#xff0c;其实挺简单的&#xff0c;就是好久…...

生成对抗网络(GAN)的“对抗“过程解析:从图像合成到药物发现的跨领域应用

技术原理&#xff08;数学公式示意图&#xff09; 核心对抗公式 min ⁡ G max ⁡ D V ( D , G ) E x ∼ p d a t a [ log ⁡ D ( x ) ] E z ∼ p z [ log ⁡ ( 1 − D ( G ( z ) ) ) ] \min_G \max_D V(D,G) \mathbb{E}_{x\sim p_{data}}[\log D(x)] \mathbb{E}_{z\sim p_…...

[鸿蒙笔记-基础篇_自定义构建函数及自定义公共样式]

在开发中遇到比较复杂的界面的时候都会用到自定义组件&#xff0c;但是在自定义组件内部也会有一些公共的布局及公共的样式&#xff0c;这时就需要用到自定义构建函数和自定义构建样式。说白了就是&#xff1a;在ets文件中进行构建函数和构建样式的抽取封装。比较常用记录一下。…...

【C】初阶数据结构4 -- 双向循环链表

之前学习的单链表相比于顺序表来说&#xff0c;就是其头插和头删的时间复杂度很低&#xff0c;仅为O(1) 且无需扩容&#xff1b;但是对于尾插和尾删来说&#xff0c;由于其需要从首节点开始遍历找到尾节点&#xff0c;所以其复杂度为O(n)。那么有没有一种结构是能使得头插和头删…...

【动态路由】系统Web URL资源整合系列(后端技术实现)【nodejs实现】

需求说明 软件功能需求&#xff1a;反向代理功能&#xff08;描述&#xff1a;apollo、eureka控、apisix、sentinel、普米、kibana、timetask、grafana、hbase、skywalking-ui、pinpoint、cmak界面、kafka-map、nacos、gateway、elasticsearch、 oa-portal 业务应用等多个web资…...

解读 Flink Source 接口重构后的 KafkaSource

前言 Apache Kafka 和 Apache Flink 的结合&#xff0c;为构建实时流处理应用提供了一套强大的解决方案[1]。Kafka 作为高吞吐量、低延迟的分布式消息队列&#xff0c;负责数据的采集、缓冲和分发&#xff1b;而 Flink 则是功能强大的流处理引擎&#xff0c;负责对数据进行实时…...

一场始于 Selector Error 的拯救行动:企查查数据采集故障排查记

时间轴呈现事故进程 17:00&#xff1a;开发人员小李正在尝试利用 Python 爬虫从企查查&#xff08;https://www.qcc.com&#xff09;抓取公司工商信息。原本一切正常&#xff0c;但突然发现信息采集失败&#xff0c;程序抛出大量选择器错误。17:15&#xff1a;小李发现&#x…...

代码随想录刷题攻略---动态规划---子序列问题1---子序列

子序列&#xff08;不连续&#xff09;和子序列&#xff08;连续&#xff09;的问题 例题1: 最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的…...

QEMU 搭建arm linux开发环境

Qemu 作为一款强大的开源虚拟化软件&#xff0c;为我们提供了一个便捷且经济实惠的方式来模拟各种硬件环境&#xff0c;从而在上面安装和学习 Linux 系统。本文将详细介绍如何使用 Qemu 搭建 Linux 学习环境&#xff0c; 环境准备 操作系统&#xff1a;建议使用 Ubuntu 20.04…...

PyQt组态软件 拖拽设计界面测试

PyQt组态软件测试 最近在研究PyQt,尝试写个拖拽设计界面的组态软件&#xff0c;目前实现的功能如下&#xff1a; 支持拖入控件&#xff0c;鼠标拖动控件位置 拖动控件边缘修改控件大小支持属性编辑器&#xff0c;修改当前选中控件的属性 拖动框选控件&#xff0c;点选控件 控…...

JAVA泛型介绍与举例

Java中&#xff0c;泛型用于编译阶段限制集合中元素的类型&#xff0c;或者限制类中某个属性的类型&#xff0c;编译过程中发生类型擦除&#xff0c;最终还是Object类型。 1. 集合中的泛型 集合默认可以存储任何类型的元素&#xff0c;即Object类型&#xff0c;当使用一个集合…...

JavaScript 内置对象-Math对象

在JavaScript中&#xff0c;Math 对象提供了一系列与数学相关的静态方法和属性&#xff0c;帮助开发者执行复杂的计算任务。无论是简单的算术运算还是高级的几何、统计计算&#xff0c;Math 对象都能提供强大的支持。本文将详细介绍 Math 对象的主要功能及其使用方法。 一、简…...