public int firstMissingPositive(int[] nums) {
int n=nums.length;
boolean isContainOne=false;
for(int i=0;i<nums.length;i++){
if(nums[i]==1){
isContainOne=true;
break;
}
}
if(!isContainOne)
return 1;
for(int i=0;i<nums.length;i++){
if(nums[i]<1||nums[i]>n){
nums[i]=1;
}
}
//关键在这,如果a存在,则是数组中下标为a元素值为负;如果n存在,则是数组中下标为0的元素为负。
for(int i=0;i<n;i++){
int a=Math.abs(nums[i]);
if(a==n){
nums[0]=-Math.abs(nums[0]);
}
else{
nums[a]=-Math.abs(nums[a]);
}
}
for(int i=1;i<n;i++){
if(nums[i]>0)
return i;
}
if(nums[0]>0)
return n;
return n+1;
}
leetCode(41)
最新推荐文章于 2024-08-19 11:05:35 发布