给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
时间: 2023-04-28 21:03:30 浏览: 221
题目描述:
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
解题思路:
我们可以使用桶排序的思想,将每个数放到它应该在的位置上,然后再遍历一遍数组,找到第一个不在它应该在的位置上的数,这个数就是没有出现的最小正整数。
具体实现:
1. 遍历数组,将每个数放到它应该在的位置上,例如,数 5 应该放在数组下标为 4 的位置上。
2. 再遍历一遍数组,找到第一个不在它应该在的位置上的数,这个数就是没有出现的最小正整数。
3. 如果数组中所有的数都在它应该在的位置上,那么最小正整数就是数组长度加 1。
代码实现:
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int n = nums.size();
for (int i = ; i < n; i++) {
while (nums[i] > && nums[i] <= n && nums[nums[i] - 1] != nums[i]) {
swap(nums[i], nums[nums[i] - 1]);
}
}
for (int i = ; i < n; i++) {
if (nums[i] != i + 1) {
return i + 1;
}
}
return n + 1;
}
};
阅读全文