[LeetCode] #268 丢失的数字

给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。

输入:nums = [3,0,1]
输出:2
解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。

排序

class Solution {
    public int missingNumber(int[] nums) {
        Arrays.sort(nums);
        if (nums[nums.length-1] != nums.length) return nums.length;
        if (nums[0] != 0) return 0;
        for(int i = 0; i < nums.length; i++){
            if(i < nums.length-1 && nums[i+1]-nums[i] != 1) return nums[i]+1;
        }
        return -1; 
    }
}

使用HashSet

class Solution {
    public int missingNumber(int[] nums) {
        Set<Integer> numSet = new HashSet<Integer>();
        for (int num : nums) numSet.add(num);
        for (int number = 0; number < nums.length + 1; number++) {
            if (!numSet.contains(number)) {
                return number;
            }
        }
        return -1;
    }
}

位运算(对一个数进行两次完全相同的异或运算会得到原来的数)

class Solution {
    public int missingNumber(int[] nums) {
        int missing = nums.length;
        for (int i = 0; i < nums.length; i++) {
            missing ^= i ^ nums[i];
        }
        return missing;
    }
}

数学运算(高斯求和公式)

class Solution {
    public int missingNumber(int[] nums) {
        int expectedSum = nums.length*(nums.length + 1)/2;
        int actualSum = 0;
        for (int num : nums) actualSum += num;
        return expectedSum - actualSum;
    }
}

知识点:

总结:

posted @ 2021-09-15 14:46  1243741754  阅读(21)  评论(0编辑  收藏  举报