🎁👉点击进入文心快码 Baidu Comate 官网,体验智能编码之旅,还有超多福利!🎁
【大厂面试真题】系列,带你攻克大厂面试真题,秒变offer收割机!
❓今日问题:在未排序的整数数组找到最小的缺失正整数
❤️一起看看文心快码Baidu Comate给出的答案吧!如果这个问题你也会,也可以在评论区写出你的答案哦~
@Comate
为了找到未排序整数数组中的最小缺失正整数,同时满足时间复杂度为 O(n) 和空间复杂度为 O(1) 的要求,我们可以使用原地哈希的方法。这个方法主要基于以下思路:
忽略非正整数:由于我们要找的是最小的缺失正整数,因此可以忽略数组中的所有非正整数(即负数和零)。
原地哈希:我们将数组中的每个正整数 x 放到数组索引为 x-1 的位置上(如果 x 在数组范围内)。例如,如果数组中有一个值为 3 的元素,我们尝试将它放到索引 2 的位置上。这个过程可能涉及到多次交换,因为原本在索引 2 的位置上可能有其他的数。
寻找缺失的数:在进行了原地哈希之后,我们遍历数组,第一个不满足“数组索引加 1 等于数组值”的位置对应的“索引加 1”就是最小的缺失正整数。如果所有位置都满足这个条件,那么最小的缺失正整数就是数组长度加 1。
下面是这个算法的 Python 实现:
def find_smallest_missing_positive(nums):
n = len(nums)
第一步:原地哈希
for i in range(n):
while 1 <= nums[i] <= n and nums[nums[i] - 1] != nums[i]:
交换位置,将 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
如果数组是完整的(1, 2, 3, ..., n),则返回 n + 1
return n + 1
示例
nums = [3, 4, -1, 1, 2, 5, 7]
print(find_smallest_missing_positive(nums)) # 输出应为 6
在这个示例中,数组 [3, 4, -1, 1, 2, 5, 7] 经过原地哈希后,正整数会尽可能地被放到它们“正确”的位置上。最终,我们发现索引 5 的位置上的数是 7,而不是应该的 6,因此 6 就是最小的缺失正整数。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。