文章目录

  • 题目描述
  • 思路 & 代码

题目描述

  • 难点在于时空复杂度的要求
  • 想出最优方法,需要认真理解题目。

思路 & 代码

  • 做法:建立一个逻辑上的哈希表,令 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、哈希)相关推荐

  1. Leetcode 40组合总数(回溯)Ⅱ41缺失的第一个正数42接雨水

    维护公众号:bigsai ,回复进群加入打卡,回复bigsai分享一些学习资源! 上周第一次 LeetCode 36有效的数独&37解数独(八皇后问题) 上周第二次 LeetCode 38外观 ...

  2. Leetcode算法Java全解答--41. 缺失的第一个正数

    Leetcode算法Java全解答–41. 缺失的第一个正数 文章目录 Leetcode算法Java全解答--41. 缺失的第一个正数 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 ...

  3. Java实现 LeetCode 41 缺失的第一个正数

    41. 缺失的第一个正数 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: ...

  4. 41. 缺失的第一个正数 golang

    41. 缺失的第一个正数 给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3 ...

  5. 努力前端【LeetCode-10】448. 找到所有数组中消失的数字 442. 数组中重复的数据(中等) 41. 缺失的第一个正数(困难) [鸽笼原理,数组,Map,类似No.645]

    文章目录 题目描述-448 一.哈希Map 二.空间复杂度的优化--鸽笼原理 三.总结 题目描述-442 一.还是hashMap 二.继续鸽笼原理 题目描述-41 一.基础方案 二.数组模拟Map 题 ...

  6. LeetCode 41. 缺失的第一个正数

    文章目录 1. 题目信息 2. 思路 3. 代码 1. 题目信息 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1:输入: [1,2,0] 输出: 3 示例 2:输入: [3,4, ...

  7. leetcode —— 41. 缺失的第一个正数

    给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 解题思路: 判断数组中是否存在1,如果没有1则直接返回1,结束: 如果数组长度为1,同时 ...

  8. LeetCode 41. 缺失的第一个正数 First Missing Positive

    给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [7,8,9,11 ...

  9. 41,缺失的第一个正数

    解题思路 一,暴力肯定不可取,时间要O(n^2) 二,sort一遍也不行,空间要O(n) 三,时间要O(n),空间常数,只能找方法. 可以想到,如果每个数字刚好对应那个 空间地址(nums[i]==i ...

最新文章

  1. repeater中后台动态为控件添加属性
  2. 提升机器学习数学,理论基础的7本著作(文末附资源下载!)
  3. 将页面多个下拉框的值以字符串拼接方式存放至数据库一个字段中
  4. 读书笔记《Hadoop开源云计算平台》
  5. CGAN生成cifar10, cifar100, mnist, fashion_mnist,STL10,Anime图片(pytorch)
  6. qos 流控功能_怎么设置飞鱼星QoS流量控制中的传统流控
  7. C# 内存的理解 通俗说
  8. 千兆网综合布线系统的线缆选型
  9. 利用代码分别实现jdk动态代理和cglib动态代理_代理模式实现方式及优缺点对比...
  10. java 多态判断非空_Java 面试知识点解析基础知识
  11. 马云创造的就业机会多还是毁掉的就业机会多?
  12. 【年终总结】可圈可点的2018年
  13. oracle对象依赖关系图,Oracle concepts 学习笔记(4)——Schema对象间的依赖关系
  14. 基于三维冲击波的变分理论--交通运输工程(一)
  15. python有几级等级考试成绩查询_python查询46级成绩
  16. ntp校时器(网络对时服务器)自动化系统技术应用方案
  17. 圆桌:满足客人空座需求,准备最少的椅子,合理安排客人入座圆桌
  18. 共享锁和排他锁的区别
  19. java使用freemarker模板导出word,合并单元格,单元格内换行
  20. 地震——《孩子,快抓紧妈妈的手》

热门文章

  1. 交叉编译及linux简单程序设计,嵌入式实验6交叉编译及Linux简单程序设计实验
  2. axios 注册拦截器 cdn引用_PicGo+jsDelivr+GitHub搭建免费cdn加速的图床
  3. python怎么输入两个数然后求差值_python两个日期之间天差值获取
  4. 计算机组装与维护预实验报告,计算机组装与维护实验报告.doc
  5. OpenCV绘图和注释
  6. JavaSE——类集(上)(Collection、List、Iterator、forEach)
  7. SSD300网络结构(pytorch)+多尺度训练与测试
  8. python多进程并发与pool多线程
  9. Android手绘效果实现
  10. Python自省(反射) 与 inspect 模块