题目:https://leetcode-cn.com/problems/first-missing-positive/
答案:暴力法:
public int firstMissingPositive(int[] nums) {
int result = -1;
int max = 0;
for (int i=0;i<nums.length;i++){
if(nums[i]>max) max = nums[i];
}
if(max == 0) return 1;
boolean isExit = false;
for (int i=1;i<max;i++){
isExit = false;
for(int j=0;j<nums.length;j++){
if(nums[j]-i==0){
isExit = true;
break;
}
}
if(!isExit){
result = i;
break;
}
}
if(result == -1){
result = max+1;
}
return result;
}
二、交换法:
public int firstMissingPositive(int[] nums) {
int temp;
for(int i=0;i<nums.length;i++){
while (nums[i]>0 && nums[i]<=nums.length && nums[nums[i]-1] != nums[i]){
temp = nums[nums[i]-1];
nums[nums[i]-1] = nums[i];
nums[i] = temp;
}
}
int index = -1;
for (int i=0;i<nums.length;i++){
if(nums[i]!=i+1){
index = i+1;
break;
}
}
if(index == -1){
return nums.length+1;
}else{
return index;
}
}
三、标记法,通过正数取负数代表已经存在过
for(int i=0;i<nums.length;i++){
if(nums[i]<=0){
nums[i] = nums.length+1;
}
}
for(int i=0;i<nums.length;i++){
int num = Math.abs(nums[i]);
if(num<=nums.length){
nums[num-1] = -Math.abs(nums[num-1]);
}
}
for(int i=0;i<nums.length;i++){
if(nums[i]>0){
return i+1;
}
}
return nums.length+1;