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

力扣刷题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

http://www.xdnf.cn/news/4753.html

相关文章:

  • Linux防火墙
  • DVWA保姆级通关教程--05文件上传
  • LeetCode 热题 100 131. 分割回文串
  • 对 Kotlin 中的 data 关键字的理解,相比于普通类有哪些特点?
  • 在浏览器使用 MCP,纯边缘函数实现 MCP Client Server
  • 软考错题(三)
  • JavaSE核心知识点02面向对象编程02-01(类与对象)
  • Ubuntu 安装 Nginx
  • networkmanager 和 resolv.conf 可能有覆盖需要配置DNS
  • OpenHarmony平台驱动开发(八),MIPI CSI
  • 旧版 Flutter 写的项目, 想要在新的环境上运行?
  • Kotlin 遍历
  • Spring普通配置类 vs 自动配置类-笔记
  • USRP B210 TX_IQ处理
  • Ceph PG unfound/lost 问题排查与解决
  • 记录Token反序列化OAuth2Authentication(主要是直接存储用户信息的UserDetails )
  • [matlab]private和+等特殊目录在新版本matlab中不允许添加搜索路径解决方法
  • 医院信息集成平台是什么?怎么促进医院信息化建设?
  • sui在windows虚拟化子系统Ubuntu和纯windows下的安装和使用
  • 皇冠CAD(CrownCAD)建模教程:小型风力发电机
  • [逆向工程]什么是HOOK(钩子)技术(二十一)
  • MySQL回表详解!
  • 视频添加字幕脚本分享
  • AI学习路径
  • GrassRoot备份项目
  • 剖析 FFmpeg:从基本功能到过滤器,实现音视频处理的灵活性
  • python编译exe执行时报错:OSError:[WinError6]句柄无效
  • http协议理解
  • LLM 论文精读(三)Demystifying Long Chain-of-Thought Reasoning in LLMs
  • Qt 编译 sqldrivers之psql