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

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

这个算法的核心思想是通过交换操作,将每个数放到它应该在的位置上。然后再次遍历数组,找到第一个不在正确位置上的数,其索引加一即为缺失的最小正整数。

def first_missing_positive(nums):n = len(nums)# 第一次遍历,将数组中的每个数放到正确的位置上for i in range(n):while 1 <= nums[i] <= n and nums[nums[i] - 1] != nums[i]:nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1]# 第二次遍历,找到第一个不在正确位置上的数,即为缺失的最小正整数for i in range(n):if nums[i] != i + 1:return i + 1# 如果数组中所有数都在正确位置上,则缺失的是数组长度+1return n + 1

这个算法的时间复杂度是 O(n),因为每个数最多进行两次交换操作,而且只进行了两次遍历。额外空间复杂度是 O(1),因为只使用了常数级别的额外空间。

原地哈希算法的原理是通过修改输入数据本身,将数据映射到正确的位置上,从而完成一些特定的操作。在具体的场景中,原地哈希算法通常用于解决一些空间复杂度受限制的问题,以达到在常数级别的额外空间内完成操作的目的。

for i in range(n):while 1 <= nums[i] <= n and nums[nums[i] - 1] != nums[i]:nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1]
  1. 在这一步中,如果 nums[i] 不在正确的位置上,并且它应该在的位置上的数不等于它,就进行交换。

  2. 第二次遍历:找到第一个不在正确位置上的数,即为缺失的最小正整数。

  3. for i in range(n):
        if nums[i] != i + 1:
            return i + 1
     

 在这一步中,如果 nums[i] 不等于 i + 1,说明 i + 1 是缺失的最小正整数。

这样,通过两次遍历和原地交换的方式,就可以在常数级别的额外空间内找到未排序整数数组中缺失的最小正整数。

原地哈希算法通常涉及到将数据按某种规则重新排列,以满足问题的要求,而不需要额外的数据结构来存储中间结果。

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

相关文章:

  • C#使用RabbitMQ-4_路由模式(直连交换机)
  • PyTorch 之 nn.Parameter
  • KAFKA高可用架构涉及常用功能整理
  • 3d模型上的材质怎么删除---模大狮模型网
  • leetcode hot100跳跃游戏Ⅱ
  • 大数据期望最大化(EM)算法:从理论到实战全解析
  • 【鸿蒙】大模型对话应用(二):对话界面设计与实现
  • MySQL 导入数据
  • 探索数字经济:从基础到前沿的奇妙旅程
  • 【INTEL(ALTERA)】如何在 Windows 操作系统上设置 Design Space Explorer II 远程 SSH 场
  • Python编程-使用urllib进行网络爬虫常用内容梳理
  • 01 Redis的特性+下载安装启动+Redis自动启动+客户端连接
  • C++发起Https请求
  • 哪款笔记软件支持电脑和手机互通数据?
  • 部署PXE高效批量网络装机
  • 【JavaEE】UDP协议与TCP协议
  • Leetcode—1828. 统计一个圆中点的数目【中等】
  • 新概念英语第二册(47)
  • 抽象类(Java)、模板方法设计模式
  • 【Delphi】IDE 工具栏错乱恢复
  • 自动化报告的前奏|使用python-pptx操作PPT(一)
  • 2024美赛数学建模D题思路+代码
  • JDBC 结构优化2
  • 大模型相关术语
  • 数据库之九 流程控制、存储过程和函数
  • DolphinDB学习(2):增删改查数据表(分布式表的基本操作)
  • 100天精通Python(实用脚本篇)——第114天:基于smtplib与email模块实现收发邮件(附上多个案例代码)
  • redisTemplate.opsForValue()
  • 多线程事务如何回滚?
  • 医院如何筛选安全合规的内外网文件交换系统?