题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/74fb3e2d992caa95b0dd45b51ad10631.png)
大致思路
- 第一,将所有的数组加起来,再把0-(length-1)的数字和求出来,两个差值即为目标值。
- 第二:根据一个数 连续 ^ 同一个数 两次 得到的还是这个数。让0-(length-1)的数字和数组的每一个数相异或,最后得到的数字就是那个缺失的数字。
- 排序,通过2分法再找那个缺失的数字
代码实现
package com.immunize.leetcode.missingNumber;
import java.util.Arrays;
public class missingNumber {
public static int missingNumber(int[] nums) {
int dst = nums.length;
for (int i = 0; i < nums.length; i++) {
dst ^= nums[i] ^ i;
}
return dst;
}
public static int missingNumber1(int[] nums) {
int sum0 = nums.length * (nums.length + 1) / 2;
int sum = 0;
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
}
int dst = sum0 - sum;
return dst;
}
public static int missingNumber2(int[] nums) {
Arrays.sort(nums);
int dst = 0;
int low = 0;
int high = nums.length;
while (low <= high) {
int mid = (low + high) / 2;
if (nums[mid] > mid) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return low;
}
public static void main(String[] args) {
int[] nums = { 0, 1, 8, 3, 4, 6, 5, 9, 2 };
System.out.println(missingNumber(nums));
System.out.println(missingNumber1(nums));
System.out.println(missingNumber2(nums));
}
}