当前位置: 首页 > 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.dtcms.com/a/300952.html

相关文章:

  • JavaScript单线程实现异步
  • [ The Missing Semester of Your CS Education ] 学习笔记 shell篇
  • 浅谈如何解决多组件系统相互依赖、调用导致接口复杂问题
  • 深入理解Java内存与运行时机制:从对象内存布局到指针压缩
  • 命令行和neovim的git操作软件-lazygit
  • 探索 Vim:Linux 下的高效文本编辑利器
  • Unity Catalog与Apache Iceberg如何重塑Data+AI时代的企业数据架构
  • Windows 11 Qt 5.15.x 源码编译,支持C++20
  • 字节跳动Coze Studio开源了!架构解析
  • 01人工智能中优雅草商业实战项目视频字幕翻译以及声音转译之底层处理逻辑阐述-卓伊凡|莉莉
  • go mod教程、go module
  • docker 自定义网桥作用
  • JavaScript手录07-数组
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-38,(知识点:晶体管放大电路频率特性,下限截止频率)
  • 将 JsonArray 类型的数据导出到Excel文件里的两种方式
  • 内存泄漏问题排查
  • mmap的调用层级与内核态陷入全过程
  • java8+springboot2.5.4环境Markdwon转word
  • 设计模式(十四)行为型:职责链模式详解
  • add新增管理员功能、BaseController类的简介--------示例OJ
  • linux安装nvm教程
  • Windows 11修复损坏的 ISO 文件
  • 二、搭建springCloudAlibaba2021.1版本分布式微服务-Nacos搭建及服务注册和配置中心
  • RHEL9 网络配置入门:IP 显示、主机名修改与配置文件解析
  • 【C++】红黑树实现
  • logstash采集springboot微服务日志
  • 使用Python,OpenCV,K-Means聚类查找图像中最主要的颜色
  • C语言:函数
  • AI大模型前沿:Muyan-TTS开源零样本语音合成技术解析
  • 力扣129. 求根节点到叶节点数字之和