给定一个无序的整数数组,怎么找到第一个大于0,并且不在此数组的整数。比如[1,2,0] 返回 3, [3,4,-1,1] 返回 2。最好能O(1)空间和O(n)时间。
1 public class Solution {
2 public int findMissedNumber(int[] nums) {
3 for (int i = 0; i < nums.length; i++) {
4 if (nums[i] > 0 && nums[i] - 1 != i && nums[i] != nums[nums[i] - 1]) {
5 int tmp = nums[nums[i] - 1];
6 nums[nums[i] - 1] = nums[i];
7 nums[i] = tmp;
8 i--;
9 }
10 }
11 for (int j = 0; j < nums.length; j++) {
12 if (nums[j] - 1 != j) return j + 1;
13 }
14 return nums.length + 1;
15 }
16 }