C语言给定一个未排序的整数数组 nums,找出其中没有出现的最小的正整数。 给出时间复杂度为 O(n) 并且只使用常数级别额外空间的代码
时间: 2023-05-13 11:07:46 浏览: 272
一个未排序的整数数组,请找出其中没有出现的最小的正整数。
5星 · 资源好评率100%
可以使用桶排序的思想,将数组中的数放入对应的桶中,然后遍历桶,找到第一个空桶的下标即为所求。
以下是代码实现:
```c
int firstMissingPositive(int* nums, int numsSize){
int i;
for(i = 0; i < numsSize; i++){
while(nums[i] > 0 && nums[i] <= numsSize && nums[nums[i] - 1] != nums[i]){
int temp = nums[nums[i] - 1];
nums[nums[i] - 1] = nums[i];
nums[i] = temp;
}
}
for(i = 0; i < numsSize; i++){
if(nums[i] != i + 1){
return i + 1;
}
}
return numsSize + 1;
}
```
时间复杂度为 O(n),空间复杂度为常数级别。
阅读全文