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

力扣刷题Day 42:缺失的第一个正数(238)

1.题目描述

2.思路

方法1:把原数组转化成集合,然后从1开始递增查询当前正整数是否在集合里。

方法2:将原数组进行排序,删除非正数,再在数组头部加入元素0, 遍历数组就可以找出其中没有出现的最小正整数。

方法3:灵茶山艾府大佬的换座位思路,一个萝卜一个坑,非常巧妙。

3.代码(Python3)

方法1:

class Solution:def firstMissingPositive(self, nums: List[int]) -> int:nums = set(nums)min_miss = 1while 1:if min_miss not in nums:return min_missmin_miss += 1

方法2:

class Solution:def firstMissingPositive(self, nums: List[int]) -> int:nums.sort()while nums[0] <= 0:nums.pop(0)if not nums:return 1nums.insert(0, 0)for i in range(1, len(nums)):if nums[i] != nums[i - 1] + 1 and nums[i] != nums[i - 1]:return nums[i - 1] + 1return nums[-1] + 1

方法3:

class Solution:def firstMissingPositive(self, nums: List[int]) -> int:n = len(nums)# 换座位for i in range(n):while (1 <= nums[i] <= n) and nums[i] != nums[nums[i] - 1]:j = nums[i] - 1nums[i], nums[j] = nums[j], nums[i]# 是否匹配for i in range(n):if nums[i] != i + 1:return i + 1return n + 1

4.执行情况

方法1:

方法2:

方法三:

5.感想

不知道方法1算不算是使用了常数级别的额外空间,而且我天呢被方法3绕晕了我不是开玩笑,直接nums[i] - 1 != i不行,去了j = nums[i] - 1也不行T_T

相关文章:

  • javaStream流toMap小坑
  • 算法与数据结构 - 常用图算法总结
  • 视频编解码学习六之视频采集和存储
  • C++算法(19):整数类型极值,从INT_MIN原理到跨平台开发实战
  • 大模型备案材料解析:模型服务协议涵盖内容
  • SpringBoot+Dubbo+Zookeeper实现分布式系统步骤
  • 【hadoop】Sqoop数据迁移工具的安装部署
  • 车载网络TOP20核心概念科普
  • 如何使用极狐GitLab 软件包仓库功能托管 ruby?
  • 3.2.3 掌握RDD转换算子 - 2. 过滤算子 - filter()
  • 按摩椅的机芯类型和材质
  • vue中router和route的区别
  • 矿井设备通信破局:ModbusTCP转DeviceNet网关应用实践
  • 2025年3月青少年机器人技术等级考试(二级)实际操作真题试卷
  • 从单智到多智:深度拆解基于MetaGPT的智能体辩论
  • Kafka消息不丢失处理
  • leetcode 3342. 到达最后一个房间的最少时间 II 中等
  • IC ATE集成电路测试学习——PLL测试(一)
  • 2025年前端在线协同编辑技术研究
  • 使用Compose编排工具搭建Ghost博客系统
  • 中华人民共和国和俄罗斯联邦关于进一步加强合作维护国际法权威的联合声明
  • 越秀地产前4个月销售额约411.2亿元,达年度销售目标的34.1%
  • 复旦设立新文科发展基金,校友曹国伟、王长田联合捐赠1亿助力人文学科与社会科学创新
  • 李云泽:再批复600亿元,进一步扩大保险资金长期投资试点范围
  • 印度袭击巴基斯坦已致至少3人死亡
  • 默茨在第二轮投票中当选德国总理