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

leetcode hot 100 41. 缺失的第一个正数

代码

测试用例

测试用例

测试结果

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
class Solution(object):def firstMissingPositive(self, nums):""":type nums: List[int]:rtype: int"""# 得到最大值,正数最小值# 不能排序,因为排序nlogn#  只能利用原本的数字存储了for i ,val in enumerate(nums):while nums[i]>0  and  nums[i]<=len(nums) and nums[i]!=i+1 and nums[nums[i]-1] != nums[i]:temp = nums[i]nums[i] = nums[temp-1]nums[temp-1] = tempfor i in range(len(nums)):if nums[i]!=i+1:return i+1return len(nums)+1

首先题目的要求是空间为常熟

所以不能使用hash表

那么我们只能用原本的数组去处理了

所以我们的方法是把符合条件的正整数也就是1-》len(nums)的数放到他的值减一的下标处,这样遍历一遍就知道少了哪个了。

需要考虑多种情况

1. 当你把一个数换过去之后,换回来的数还需要继续换,所以我们的for里面用while处理

2. 当你把数换过来之后可能那个地方本来就已经有一个数占据位置了,也就是[1,1]的情况,这样会导致死循环,所以你需要把这种情况当做看不见。因为放到原处,也是一个不合理值,反正要放到的地方已经有合理值了。

http://www.lryc.cn/news/544209.html

相关文章:

  • UniApp 使用 u-loadmore 完整步骤
  • 设置电脑一接通电源就主动开机
  • 优艾智合机器人日本子公司成立,加速推进国际化布局
  • 自然语言处理NLP入门 -- 第七节预训练语言模型
  • Git GitHub基础
  • 多平台文章同步工具PostSync 安装介绍
  • PXE批量网络装机与Kickstart自动化安装工具
  • css的复合选择器
  • Wireshark Lua 插件教程
  • mysql怎样优化where like ‘%字符串%‘这种模糊匹配的慢sql
  • Python代码片段-断点任务
  • mapbox基础,使用geojson加载heatmap热力图层
  • 03.检测 Zabbix agent
  • Vue 3 + Vite 项目配置访问地址到服务器某个文件夹的解决方案
  • JavaScript将:;隔开的字符串转换为json格式。使用正则表达式匹配键值对,并构建对象。多用于解析cssText为style Object对象
  • MT-Metrics
  • 【数据结构第十六节】实现链式结构二叉树(详细递归图解—呕心沥血版!)
  • 【Python爬虫(100)】从当下到未来:Python爬虫技术的进阶之路
  • Vue-Flow绘制流程图(Vue3+ElementPlus+TS)简单案例
  • CNN:卷积网络中设计1×1夹在主要卷积核如3×3前后的作用
  • esp8266 rtos sdk开发环境搭建
  • 【深度学习】矩阵的核心问题解析
  • DeepSeek模型昇腾部署优秀实践
  • 从 Spring Boot 2 升级到 Spring Boot 3 的终极指南
  • mysql架构查询执行流程(图解+描述)
  • 20分钟 Bash 上手指南
  • 事故02分析报告:慢查询+逻辑耦合导致订单无法生成
  • vant2 vue2 两个输入框联动验证遇到的问题
  • 硬件工程师入门教程
  • 如何使用Docker搭建哪吒监控面板程序