丢失的数字

52 阅读1分钟
package org.example.leetcodeBook.hash;  
  
import java.util.Arrays;  
import java.util.HashSet;  
//丢失的数字  
//给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n]  
// 这个范围内没有出现在数组中的那个数。  
// 示例 1:  
// 输入:nums = [3,0,1]  
// 输出:2  
// 解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。  
// 2 是丢失的数字,因为它没有出现在 nums 中。  
public class MissingNumberSolution {  
public int missingNumber(int[] nums){  
    Arrays.sort(nums);  
    int n=nums.length;  
    for (int i = 0; i <n ; i++) {  
        if(nums[i]!=i){  
            return i;  
        }  
    }  
    return n;  
}  
public int missingNumber1(int[] nums){  
    HashSet<Integer> set = new HashSet<>();  
    int n=nums.length;  
    for (int i = 0; i <n ; i++) {  
        set.add(nums[i]);  
    }  
    int missing=-1;  
    for (int i = 0; i <=n ; i++) {  
        if(!set.contains(i)){  
            missing=i;  
            break;  
        }  
    }  
    return missing;  
}  
  
public int missingNumber2(int[] nums){  
    int xor=0;  
    int n=nums.length;  
    for (int i = 0; i <n ; i++) {  
        xor^=nums[i];  
    }  
    for (int i = 0; i <=n ; i++) {  
        xor^=i;  
    }  
    return xor;  
}  
  
public int missingNumber3(int[] nums){  
    int n=nums.length;  
    int total=n*(n+1)/2;  
    int arrSum=0;  
    for (int i = 0; i <n ; i++) {  
        arrSum+=nums[i];  
    }  
    return total-arrSum;  
}  
}