数组中未出现的最小正整数
题目描述
给定一个无序数组arr,找到数组中未出现的最小正整数
例如arr = [-1, 2, 3, 4]。返回1
arr = [1, 2, 3, 4]。返回5
[要求]
时间复杂度为O(n),空间复杂度为O(1)
代码
import java.util.*;
public class Solution {
/**
* return the min number
* @param arr int整型一维数组 the array
* @return int整型
*/
public int minNumberdisappered (int[] arr) {
// write code here
int length = arr.length;
if(length == 0) return 1;
for(int i=0; i<arr.length; i++){
//将正且不大于数组长度的整数按位置往相应的数组位置移动
if(arr[i]>0 && arr[i]<length+1 && arr[i]!=i+1 ){
swap(arr, arr[i]-1, i);
}
}
for(int i=0; i<arr.length; i++){
if(arr[i]!=i+1){
return i+1;
}
}
return length+1;
}
public void swap (int[] arr, int i, int j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}