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

力扣热题100----------41.缺少的第一个正数

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。

请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

示例 1:

输入:nums = [1,2,0]
输出:3
解释:范围 [1,2] 中的数字都在数组中。
示例 2:

输入:nums = [3,4,-1,1]
输出:2
解释:1 在数组中,但 2 没有。
示例 3:

输入:nums = [7,8,9,11,12]
输出:1
解释:最小的正数 1 没有出现。

提示:

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

我的思路是这样的 我们直接把数组当成一个哈希表 将数组里面的值大于0的或者小于n的替换为n+1 第二我们将数组里面的值提取出来 我们直接使用绝对值 让他一定 大于0 然后用一个if判断 判断他小于n我们才进行下列步骤 将这个值当成索引去找到 以这个索引为这个值的数 将他设置为负数 然后我们再次遍历 找到第一个大于0的值 那么他的索引+1就是我们的答案 因为负数的索引值+1的绝对值一定已经出现在数组中了

class Solution {public int firstMissingPositive(int[] nums) {int n=nums.length;for (int i = 0; i < n; i++) {if (nums[i]<=0 || nums[i]>n){nums[i]=n+1;}}for (int i = 0; i < n; i++) {int x=Math.abs(nums[i]);if (x<=n){if (x - 1 >= 0 && x - 1 < n) {nums[x - 1] = -Math.abs(nums[x - 1]);}}}for (int i = 0; i < n; i++) {if (nums[i]>0){return i+1;}}return n+1;}
}
http://www.xdnf.cn/news/1201267.html

相关文章:

  • C++算法竞赛篇(五)循环嵌套题型讲解
  • JavaScript手录07-数组
  • JavaScript核心概念全解析
  • 创建属于自己的github Page主页
  • 【Python系列】Flask 应用中的主动垃圾回收
  • 安装redis
  • 生成式召回-TIGER范式
  • Vim 编辑器工作模式及操作指南
  • 抗辐照芯片在低轨卫星星座CAN总线通讯及供电系统的应用探讨
  • 比特币运行机制全解析:区块链、共识算法与数字黄金的未来挑战
  • rapidocr v3.3.0发布了
  • OpenLayers 综合案例-轨迹回放
  • Torchv Unstrustured 文档解析库
  • C语言:函数
  • C/C++核心知识点详解
  • Qt C++ GUI 函数参数速查手册:基础与布局
  • RK3568 Linux驱动学习——Linux驱动开发准备工作
  • 【科研绘图系列】R语言绘制边际云雨图散点图
  • 基于大模型的预训练、量化、微调等完整流程解析
  • rust-模块树中引用项的路径
  • 1439-素数环2
  • 扩展组件(uni-ui)之uni-group
  • 硅基计划3.0 学习总结 肆 二叉树 初版
  • 疯狂星期四文案网第21天运营日记
  • 剑指offer第2版:双指针+排序+分治+滑动窗口
  • QT6 源,七章对话框与多窗体(17)用于辅助多文档 MDI 窗体设计 QMdiArea 的类 QMdiSubWindow:
  • MySQL 8.4 Windows 版安装记录与步骤参考
  • 《频率之光:群星之我》
  • mmap的调用层级与内核态陷入全过程
  • 依赖倒置原则 Dependency Inversion Principle - DIP