leetcode268. Missing Number

来源:互联网 发布:淘宝正品哥弟女裤 编辑:程序博客网 时间:2024/05/17 01:02

268. Missing Number

Given an array containing n distinct numbers taken from 0, 1, 2, …, n, find the one that is missing from the array.

For example,
Given nums = [0, 1, 3] return 2.

解法一

求和法,求出0-n的he,然后减去数组中的每个值,最后剩余哪个。

public class Solution {    public int missingNumber(int[] nums) {        int length = nums.length;        int sum = (0 + length) * (length + 1) / 2;        for (int i = 0; i < nums.length; i++) {            sum -= nums[i];        }        return sum;    }}

这里写图片描述

解法二

异或 b = a ^ a ^ b, 将序号和每个位置的值都异或一遍,看最后剩哪个。

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

这里写图片描述

解法三

对数组进行排序,判断当前位置的值是否大于当前序号,如果大于,则end=mid。

public class Solution {    public int missingNumber(int[] nums) {        if (nums == null || nums.length == 0) {            return -1;        }        Arrays.sort(nums);        int start = 0;         int end = nums.length;        int mid;        while (start + 1 < end) {            mid = start + (end - start) / 2;            if (mid < nums[mid]) {                end = mid;            } else {                start = mid;            }        }        if (start < nums[start]) {            return start;        } else {            return end;        }    }}

这里写图片描述

0 0
原创粉丝点击