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

LeetCode--缺失的第一个正数(41)和 接雨水(42)

目录

缺失的第一个正数

接雨水

0ms,100% 代码


缺失的第一个正数

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/first-missing-positive


题目:给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

示例 1:

输入:nums = [1,2,0]
输出:3

示例 2:

输入:nums = [3,4,-1,1]
输出:2

示例 3:

输入:nums = [7,8,9,11,12]
输出:1

提示:

    1 <= nums.length <= 5 * 105
    -231 <= nums[i] <= 231 - 1

思路:

(1)映射一个关系为数组 a[i] 存的值为 i+1,所以当 a[i] = x时,x的下标就位 x-1

(2)0 -> a.length 循环,将 a[i] 放到 a[i] - 1 位置,如果a[a[i] - 1] != a[i] 就将两个数位置调整

(3)循环判断缺失了的数,如果a[i] != i + 1,缺失的数就是 i+1,循环完后还没有找到那就是返回a.length+1

class Solution {public int firstMissingPositive(int[] nums) {for (int i = 0; i < nums.length; i++) {while (nums[i] > 0 && nums[i] <= nums.length && nums[nums[i] - 1] != nums[i]) {//当 nums[i]大于零 且 nums[i]小于nums的长度 且 nums[nums[i - 1]]不等于nums[i] 的时候循环//nums[nums[i - 1]]和nums[i]进行交换int temp = nums[nums[i] - 1];nums[nums[i] - 1] = nums[i];nums[i] = temp;}}//判断缺失的数for (int i = 0; i < nums.length; i++) {if (nums[i] != i + 1) return i + 1;}return nums.length + 1;}
}


接雨水

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/trapping-rain-water
 

题目:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

示例 1:

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6


解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。

 

示例 2:

输入:height = [4,2,0,3,2,5]
输出:9

提示:

    n == height.length
    1 <= n <= 2 * 104
    0 <= height[i] <= 105

思路:

(1)需要先找到第一个大于0的柱子当做U型的左边

(2)左边固定下来后去找右边的柱子,右边的柱子有两种可能性

1)右边找到的第一个柱子>=左边的柱子

2)右边找到的第一个柱子<左边的柱子,但不能为0

(3)求出左边柱子与右边柱子中间的空隙,这里我使用了穷举的方法尝试所有的可能性

class Solution {public int trap(int[] height) {int ans = 0;//存放接水的数量int left = 0;//存放左边柱子的高度,默认为0for(int i = 0; i < height.length; i++) {if(height[i] >= 1) {//左侧的柱子必须大于等于一才可以接水left = i++;//左侧柱子高度等于iint now = 0;while(i < height.length && height[i] < height[left]) {//右边小于左边才可以存储now += height[left] - height[i++];//左边减去右边}if(i < height.length) {ans += now;i--;//for后会有i++,所以要--来抵消++,右边的柱子可以当做下一个U型的左侧柱子} else {//右边柱子都比左边的低i = left - 1;//回到左边的左边,i++抵消,重新回到leftheight[left]--;//每次减去1去匹配右边更低的柱子}}}return ans;}
}

0ms,100% 代码

class Solution {public int trap(int[] height) {int left = 0, right = height.length - 1;int maxL = height[left], maxR = height[right];int res = 0;while (left < right) {maxL = Math.max(maxL, height[left]);maxR = Math.max(maxR, height[right]);res += maxR > maxL ? maxL - height[left++] : maxR - height[right--];}return res;}
}

 

 

相关文章:

LeetCode--缺失的第一个正数(41)和 接雨水(42)

目录 缺失的第一个正数 接雨水 0ms&#xff0c;100% 代码 缺失的第一个正数 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/first-missing-positive 题目&#xff1a;给你一个未排序的整数数组 nums &#xff0c;请…...

java源码阅读---ReentrantLock源码解析

ReentrantLock源码解读 在讲ReentrantLock之前我们先看一下Lock接口里的方法 Lock接口中的方法 lock()方法 void lock(); //直接加锁,如果加锁失败什么也不返回lockInterruptibly()方法 void lockInterruptibly() throws InterruptedException;lockInterruptibly()方法能够…...

OpenCv + Qt5.12.2 文字识别

OpenCv Qt5.12.2 文字检测与文本识别 前言 ​ 好久没有进行一些相关的更新的了&#xff0c;去年一共更新了四篇&#xff0c;最近一直在做音视频相关的直播服务&#xff0c;又是重新学习积攒经验的一个过程。去年疫情也比较严重&#xff0c;等到解封&#xff0c;又一直很忙&a…...

网络作业1【计算机网络】

网络作业1【计算机网络】前言推荐网络作业1一. 单选题&#xff08;共7题&#xff0c;58.1分&#xff09;二. 多选题&#xff08;共1题&#xff0c;8.3分&#xff09;三. 判断题&#xff08;共4题&#xff0c;33.6分&#xff09;最后前言 2023-3-13 20:11:42 以下内容源自《计…...

常见背包问题

一.前言若你想学习或正在学习动态规划&#xff0c;背包问题一定是你需要了解的一种题型&#xff0c;并且大多数人最初都是从背包问题入坑进而打开动态规划这一大门。背包问题分为多种&#xff0c;你可以先掌握最常见的主要是三类&#xff1a;01背包、完全背包、多重背包二.分析…...

【python】python编译器以及安装

✅作者简介&#xff1a;一名在读大二学生&#xff0c;希望大家多多支持 &#x1f525;系列专栏&#xff1a;python &#x1f4ac;个人主页&#xff1a;小园园子的CSDN博客 python编译器以及安装一、编译器与解释器详细内容Python解释器种类Python的运行机制二、python环境搭建p…...

Effective C++快速复习

Effective C快速复习 习惯 C 01 视 C 为一个语言联邦&#xff1a;C、Object-Oriented C、Template C、STL 02 尽量以 const, enum, inline 替换 #define&#xff1a;其实是尽量以编译器替换预处理器比较好&#xff0c;因为 #define 只是简单的字符串匹配替换&#xff0c;编译…...

【华为OD机试真题JAVA】绘图机器的绘图问题

标题:绘图机器的绘图问题| 时间限制:1秒 | 内存限制:262144K | 语言限制:不限 绘图机器的绘图笔初始位置在原点(0,0) 机器启动后按照以下规则来进行绘制直线 1. 尝试沿着横线坐标正向绘制直线 直到给定的终点E 2. 期间可以通过指令在纵坐标轴方向进行偏移 off…...

GPT-4最震撼我的一点

昨天我看了一遍OpenAI发的视频和论文&#xff0c;最震撼我的并不是根据手绘草图生成HTML页面代码&#xff0c;因为草图太简单&#xff0c;对于复杂的有交互的界面&#xff0c;还不知道它的能力究竟如何&#xff0c;能不能生成准确的、清晰的代码&#xff0c;我再实验一下再给大…...

LeetCode-复制带随机指针的链表

题目描述&#xff1a; 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的…...

如何在Unity中实现AStar寻路算法及地图编辑器

文章目录AStar算法简介实现Node节点节点间的估价算法核心邻节点的搜索方式地图编辑器简介实现绘制地图网格障碍/可行走区域地图数据存储AStar算法 简介 Unity中提供了NavMesh导航寻路的AI功能&#xff0c;如果项目不涉及服务端它应该能满足大部分需求&#xff0c;但如果涉及服…...

线性代数之矩阵

一、思维导图二、矩阵及其运算1、矩阵的定义注&#xff1a;零矩阵&#xff1a;元素均为0 的矩阵&#xff0c;通常记作0m*n称为矩阵的类型。满足阶梯形矩阵 行简化的阶梯形矩阵即满足如下条件的矩阵&#xff1a; (1)阶梯形; (2)非零首元所在列其余元素均为0 &#xff1b; (3) 非…...

【个人首测】百度文心一言 VS ChatGPT GPT-4

昨天我写了一篇文章GPT-4牛是牛&#xff0c;但这几天先别急,文中我测试了用GPT-4回答ChatGPT 3.5 和 Notion AI的问题&#xff0c;大家期待的图片输入也没有出现。 昨天下午百度发布了文心一言&#xff0c;对标ChatGPT&#xff0c;录屏无实机演示让百度股价暴跌。但是晚上百度就…...

基于STM32的ADC采样及各式滤波实现(HAL库,含VOFA+教程)

前言&#xff1a;本文为手把手教学ADC采样及各式滤波算法的教程&#xff0c;本教程的MCU采用STM32F103ZET6。以HAL库的ADC采样函数为基础进行教学&#xff0c;通过各式常见滤波的实验结果进行分析对比&#xff0c;搭配VOFA工具直观的展示滤波效果。ADC与滤波算法都是嵌入式较为…...

Redis高级篇

文章目录面试题库redis有哪些用法&#xff1f;redis单线程时代性能依然很快的原因&#xff1f;主线程和IO线程怎么协作完成请求处理的BigKey&#xff08;重要&#xff09;什么算是BigKey&#xff1f;怎么发现BigKey&#xff1f;怎么删除bigkey&#xff1f;bigkey生产调优缓存双…...

sess.close()这句话一般是干什么的,在代码中可以不加么?

sess.close()这句话是用于关闭TensorFlow会话对象的方法。 关闭会话对象可以释放资源&#xff0c;避免内存泄漏&#xff0c;以及清除图中的变量和操作。 在代码中是否可以不加这句话&#xff0c;取决于你是如何创建和使用会话对象的。如果你使用了with语句来创建和管理会话对…...

网络舆情监测处置平台,TOOM舆情如何做好舆情风险点及防控措施?

网络舆情监测处置平台是一个综合性的系统&#xff0c;旨在帮助企业、政府或其他组织有效地管理和处置网络舆情。从多个角度来分析该平台&#xff0c;我们可以考虑以下几个方面&#xff1a; 1&#xff0c;技术实现 网络舆情监测处置平台的技术实现是其核心&#xff0c;它通常采…...

百度文心一言对标 ChatGPT,你怎么看?

文心一言 VS ChatGPT接受不完美 期待进步里程碑意义文心一言初体验✔ 文学创作✔ 商业文案创作✔ 数理逻辑推算✔ 中文理解✔ 多模态生成写在最后何为文心&#xff1f;“文”就是我们中华语言文字中的文&#xff0c;“心”是希望该语言模型可以用心的去理解语言&#xff0c;用心…...

阿里笔试2023-3-15

太菜了&#xff0c;记录一下笔试题目&#xff0c;代码有更好解法欢迎分享。 1、满二叉子树的数量。 给定一颗二叉树&#xff0c;试求这课二叉树有多少个节点满足以该节点为根的子树是满二叉树&#xff1f;满二叉树指每一层都达到节点最大值。 第一行输入n表示节点数量&#xff…...

STM32:TIM定时器输出比较(OC)

一、输出比较简介 1、输出比较 OC&#xff08;Output Comapre&#xff09;输出比较输出比较可以通过比较CNT&#xff08;时基单元&#xff09;和CCR&#xff08;捕获单元&#xff09;寄存器值的关系&#xff0c;来对输出电平进行置1、置0或翻转的操作&#xff0c;用于输出一定频…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具&#xff0c;专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑&#xff08;如DBC、LDF、ARXML、HEX等&#xff09;&#xff0c;并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学

一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件&#xff0c;其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时&#xff0c;价带电子受激发跃迁至导带&#xff0c;形成电子-空穴对&#xff0c;导致材料电导率显著提升。…...

简约商务通用宣传年终总结12套PPT模版分享

IOS风格企业宣传PPT模版&#xff0c;年终工作总结PPT模版&#xff0c;简约精致扁平化商务通用动画PPT模版&#xff0c;素雅商务PPT模版 简约商务通用宣传年终总结12套PPT模版分享:商务通用年终总结类PPT模版https://pan.quark.cn/s/ece1e252d7df...

【向量库】Weaviate概述与架构解析

文章目录 一、什么是weaviate二、High-Level Architecture1. Core Components2. Storage Layer3. 组件交互流程 三、核心组件1. API Layer2. Schema Management3. Vector Indexing3.1. 查询原理3.2. 左侧&#xff1a;Search Process&#xff08;搜索流程&#xff09;3.3. 右侧&…...