给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。
示例 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就是结果