
leetcode题解41-缺失的第一个正数原来如此简单
收集所有正整数:首先遍历输入数组,并将所有正整数存储在一个集合中,这样可以快速检查某个数是否存在。 边界检查:如果集合为空,说明所有的正整数都缺失,因此直接返回1。如果集合的最小值大于1,说明1缺失,所以返回1。 检查缺失数:从1开始递增地检查每个正整数,直到找到第一个不存在的数。 处理连续数的情况:如果所有检查过的数都存在,那么最后一个数的下一个正整数即为答案。 创建集合:使用TreeSet来存储所有的正整数。TreeSet能够自动排序和去重,这使得查找最小值和最大值非常方便。 处理空集合情况:如果正整数集合为空,说明所有正整数都缺失,所以返回1。 检查最小值大于1的情况:如果最小的正整数大于1,说明1缺失,直接返回1。 递增检查:从2开始逐个检查正整数,直到找到不存在的数。 处理连续情况:如果所有检查过的数都存在,返回最大值加1,因为这是下一个最小的正整数。
发布日期:2025-04-05 05:50:51
浏览次数:8
分类:精选文章
本文共 1297 字,大约阅读时间需要 4 分钟。
要解决这个问题,我们需要找出一个未排序的整数数组中没有出现的最小的正整数。这种方法可以通过高效地使用集合来实现。
方法思路
这种方法的时间复杂度为O(n log n),因为我们需要对这些正整数进行排序。
解决代码
import java.util.Collections;import java.util.Set;import java.util.TreeSet;public class Solution { public int firstMissingPositive(int[] nums) { SetpositiveNumbers = new TreeSet<>(); for (int num : nums) { if (num > 0) { positiveNumbers.add(num); } } if (positiveNumbers.isEmpty()) { return 1; } int min = Collections.min(positiveNumbers); if (min > 1) { return 1; } int max = Collections.max(positiveNumbers); int candidate = 1; while (candidate < max) { if (!positiveNumbers.contains(candidate)) { return candidate; } candidate++; } return max + 1; }}
代码解释
这种方法高效地解决了问题,能够快速找到最小的缺失正整数。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月17日 14时23分23秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
LeetCode——Unique Paths
2023-01-31
LeetCode二叉树从上至下路径问题总结(112.113.437.129)
2023-01-31
LeetCode哈希表+字符类的题目总结
2023-01-31
LeetCode地平线专场——第308场周赛题解
2023-01-31
LeetCode数据库题目汇总二(附答案)
2023-01-31
LeetCode新手指南:从零开始掌握算法挑战
2023-01-31
LeetCode智加科技专场——第207场周赛题解
2023-01-31
leetcode正则表达式匹配
2023-01-31
leetcode算法题解(Java版)-6-链表,字符串
2023-01-31
LeetCode经典——202.快慢指针之快乐数
2023-01-31
LeetCode经典——70.爬楼梯&&509.斐波拉契数列
2023-01-31
LeetCode美团专场——第203场周赛题解
2023-01-31
LeetCode蔚来专场——第208场周赛题解
2023-01-31
leetcode题解-买卖股票的最佳时机
2023-01-31
leetcode题解102-二叉树的层序遍历
2023-01-31
leetcode题解102-翻转二叉树
2023-01-31
leetcode题解104- 二叉树的最大深度
2023-01-31
leetcode题解108-将有序数组转换为二叉排序树
2023-01-31