[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; } }
知识点:无
总结:无