给你一个未排序的整数数组nums,请你找出其中没有出现的最小整数,用java
时间: 2023-05-28 21:01:24 浏览: 179
解答:
可以使用桶排序的思想,将数组中所有正数按照其值放到对应的下标位置上。然后遍历数组,寻找第一个不满足nums[i] = i + 1的位置i,那么i+1就是没有出现过的最小整数。
代码如下:
```java
public int findMissingNumber(int[] nums) {
int n = nums.length;
// 将所有正数放到对应的下标位置上
for (int i = 0; i < n; i++) {
// while循环保证交换来的数一定放到了它应该放的位置上
while (nums[i] > 0 && nums[i] <= n && nums[nums[i]-1] != nums[i]) {
swap(nums, i, nums[i]-1);
}
}
// 查找第一个不满足nums[i] = i+1的位置
for (int i = 0; i < n; i++) {
if (nums[i] != i + 1) {
return i + 1;
}
}
// 都满足,说明前n个正数都出现了,返回n+1
return n + 1;
}
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
```
时间复杂度:O(n)。
空间复杂度:O(1)。
阅读全文