【LeetCode笔记】41. 缺失的第一个正数(Java、哈希)
文章目录
- 题目描述
- 思路 & 代码
题目描述
- 难点在于时空复杂度的要求
- 想出最优方法,需要认真理解题目。
思路 & 代码
- 做法:建立一个逻辑上的哈希表,令 nums[i] = i + 1,比如 nums[0] = 1。那么第一个不符合这个要求的元素的下标 + 1就是答案。
- 因为要找的是“第一个未出现的正数”,所以有:
(1) 对于应放位置超出范围的值,我们先不处理:比如[1, 100, 3, -1] 里的 100、-1
(2) 对于可以放的值,如果当前位置还不是正确的值(考虑重复),就进行交换。 - 边界判断:全都满足的情况,比如[1, 2, 3],取nums.length + 1。
class Solution {public int firstMissingPositive(int[] nums) {// 1. 排序遍历:O(n*logn) O(1)// 2. HashSet:O(n) O(n)// 3. 数组转化成逻辑上的哈希表,nums[i] = i + 1:还是需要再理解理解for(int i = 0; i < nums.length; i++){// 把当前值交换到应当的位置,由于当前值更新,继续这个过程,直到当前值就是正确位置 // 或当前值超出范围// 第三个判断条件:考虑重复值while(nums[i] > 0 && nums[i] <= nums.length && nums[i] != nums[nums[i] - 1]){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;}
}
- 无注释版
- 核心思路:还是构建哈希表,while循环是关键
class Solution {public int firstMissingPositive(int[] nums) {for(int i = 0; i < nums.length; i++){while(nums[i] > 0 && nums[i] <= nums.length && nums[i] != nums[nums[i] - 1]){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笔记】41. 缺失的第一个正数(Java、哈希)相关推荐
- Leetcode 40组合总数(回溯)Ⅱ41缺失的第一个正数42接雨水
维护公众号:bigsai ,回复进群加入打卡,回复bigsai分享一些学习资源! 上周第一次 LeetCode 36有效的数独&37解数独(八皇后问题) 上周第二次 LeetCode 38外观 ...
- Leetcode算法Java全解答--41. 缺失的第一个正数
Leetcode算法Java全解答–41. 缺失的第一个正数 文章目录 Leetcode算法Java全解答--41. 缺失的第一个正数 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 ...
- Java实现 LeetCode 41 缺失的第一个正数
41. 缺失的第一个正数 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: ...
- 41. 缺失的第一个正数 golang
41. 缺失的第一个正数 给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3 ...
- 努力前端【LeetCode-10】448. 找到所有数组中消失的数字 442. 数组中重复的数据(中等) 41. 缺失的第一个正数(困难) [鸽笼原理,数组,Map,类似No.645]
文章目录 题目描述-448 一.哈希Map 二.空间复杂度的优化--鸽笼原理 三.总结 题目描述-442 一.还是hashMap 二.继续鸽笼原理 题目描述-41 一.基础方案 二.数组模拟Map 题 ...
- LeetCode 41. 缺失的第一个正数
文章目录 1. 题目信息 2. 思路 3. 代码 1. 题目信息 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1:输入: [1,2,0] 输出: 3 示例 2:输入: [3,4, ...
- leetcode —— 41. 缺失的第一个正数
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 解题思路: 判断数组中是否存在1,如果没有1则直接返回1,结束: 如果数组长度为1,同时 ...
- LeetCode 41. 缺失的第一个正数 First Missing Positive
给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [7,8,9,11 ...
- 41,缺失的第一个正数
解题思路 一,暴力肯定不可取,时间要O(n^2) 二,sort一遍也不行,空间要O(n) 三,时间要O(n),空间常数,只能找方法. 可以想到,如果每个数字刚好对应那个 空间地址(nums[i]==i ...
最新文章
- repeater中后台动态为控件添加属性
- 提升机器学习数学,理论基础的7本著作(文末附资源下载!)
- 将页面多个下拉框的值以字符串拼接方式存放至数据库一个字段中
- 读书笔记《Hadoop开源云计算平台》
- CGAN生成cifar10, cifar100, mnist, fashion_mnist,STL10,Anime图片(pytorch)
- qos 流控功能_怎么设置飞鱼星QoS流量控制中的传统流控
- C# 内存的理解 通俗说
- 千兆网综合布线系统的线缆选型
- 利用代码分别实现jdk动态代理和cglib动态代理_代理模式实现方式及优缺点对比...
- java 多态判断非空_Java 面试知识点解析基础知识
- 马云创造的就业机会多还是毁掉的就业机会多?
- 【年终总结】可圈可点的2018年
- oracle对象依赖关系图,Oracle concepts 学习笔记(4)——Schema对象间的依赖关系
- 基于三维冲击波的变分理论--交通运输工程(一)
- python有几级等级考试成绩查询_python查询46级成绩
- ntp校时器(网络对时服务器)自动化系统技术应用方案
- 圆桌:满足客人空座需求,准备最少的椅子,合理安排客人入座圆桌
- 共享锁和排他锁的区别
- java使用freemarker模板导出word,合并单元格,单元格内换行
- 地震——《孩子,快抓紧妈妈的手》
热门文章
- 交叉编译及linux简单程序设计,嵌入式实验6交叉编译及Linux简单程序设计实验
- axios 注册拦截器 cdn引用_PicGo+jsDelivr+GitHub搭建免费cdn加速的图床
- python怎么输入两个数然后求差值_python两个日期之间天差值获取
- 计算机组装与维护预实验报告,计算机组装与维护实验报告.doc
- OpenCV绘图和注释
- JavaSE——类集(上)(Collection、List、Iterator、forEach)
- SSD300网络结构(pytorch)+多尺度训练与测试
- python多进程并发与pool多线程
- Android手绘效果实现
- Python自省(反射) 与 inspect 模块