给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。
示例 1:
输入: [1,2,0] 输出: 3 示例 2:
输入: [3,4,-1,1] 输出: 2 示例 3:
输入: [7,8,9,11,12] 输出: 1
提示:
你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。
1、将所有的改为n+1,n是数组的长度
for(int i
=0;i
<n
;i
++){
if(nums
[i
]<=0){
nums
[i
]=n
+1;
}
}
2、将每个元素对应的下标的元素改成负数
for(int i
=0;i
<n
;i
++){
int x
= abs(nums
[i
])-1;
if(x
<n
){
nums
[x
] = -abs(nums
[x
]);
}
}
3、不为负数的数组元素对应的下标+1就是结果