缺失的第一个正整数
Hashmap好东西啊
public int minNumberDisappeared (int[] nums) {
// write code here
if(nums==null||nums.length==0){
return -1;
}
HashMap<Integer,Integer> hashmap = new HashMap<Integer,Integer>();
for(int i=0;i<nums.length;i++){
hashmap.put(nums[i],1);
}
for(int i=1;i<=nums.length;i++){
if(!hashmap.containsKey(i)){
return i;
}
}
return nums.length+1;
}
第二种做法,
思路就是遍历先把<=0的数标记成n+1,之后在遍历如果nums[i]为正数,就把它在数组中的位置也就是nums[nums[i]-1]这个位置的数标记为负数。标记完成之后,在进行遍历,如果仍有位置为正数证明标记时没有数字对应这个位置。返回i+1即可。 最后返回nums.length+1即可.
public int minNumberDisappeared (int[] nums) {
// write code here
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 n=Math.abs(nums[i]);
if(n>0&&n<=nums.length){
nums[nums[i]-1]=Math.abs(nums[nums[i]-1])*(-1);
}
}
for (int i=0;i<nums.length;i++){
if(nums[i]>0){
return i+1;
}
}
return nums.length+1;
}