类别:数组 统计数组中的元素
题目:
想法:
sort排序
用辅助变量j来存应有的元素,遍历排序后的数组找到最小消失数
代码:
class Solution {
public int firstMissingPositive(int[] nums) {
Arrays.sort(nums);
int i=0;
int j=1;
while(i<nums.length){
if(nums[i]>0){
if(i>0 && nums[i]==nums[i-1])
j--;
if(nums[i]>j){
break;
}else{
j++;
}
}
i++;
}
return j;
}
}
法二:原地哈希(超出数组大小的元素不要,反正是找最小的)
想法:
把整数元素放到应在的位置上(nums[i]-1),exchange位置,重复的不执行此操作
遍历“排序后”的数组,应有的位置上第一个对应错误的数字即为最小消失数
代码:
class Solution {
public int firstMissingPositive(int[] nums) {
int temp=0;
int i;
for(i=0;i<nums.length;i++){
if(nums[i]>0 && nums[i]<nums.length){
if(nums[nums[i]-1]!=nums[i]){
temp=nums[i];
nums[i]=nums[temp-1];
nums[temp-1]=temp;
if(nums[i]>0)
i--;
}
}
}
for(i=0;i<nums.length;i++){
if(nums[i]!=i+1){
break;
}
}
return i+1;
}
}
注:代码中第一个for循环可以简化为
for(i=0;i<nums.length;i++){
while(nums[i]>0 && nums[i]<=nums.length && nums[nums[i]-1]!=nums[i])
{
temp=nums[i];
nums[i]=nums[temp-1];
nums[temp-1]=temp;
}
}