268. Missing Number(Java)

来源:互联网 发布:卡盟源码带后台2016 编辑:程序博客网 时间:2024/06/07 02:08

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.

Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?

代码1:

class Solution {    public int missingNumber(int[] nums) {        int len = nums.length;        int sum = (1 + len) * len / 2;        for (int n : nums)             sum -= n;        return sum;    }}
// 相比于上面的方法可以防止溢出class Solution {    public int missingNumber(int[] nums) {        int sum = nums.length;        for (int i = 0; i < nums.length; i ++)             sum += i - nums[i];          return sum;    }}

代码2:利用A ^ A = 0,A ^ A ^ B = B,且满足结合律和交换律

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

代码3:若数组有序,可以考虑用二分搜索

class Solution {    public int missingNumber(int[] nums) {        Arrays.sort(nums);        int left = 0, right = nums.length, mid = (left + right) / 2;        while (left < right) {            // mid为本来应该的平均数            mid = (left + right) / 2;            // 若实际偏大,则抽走了小的数,则抽走的数在左边            if (nums[mid] > mid)                 right = mid;            // 若实际偏小,则抽走了大的数,则抽走的数在右边            else left = mid + 1;        }        return left;    }}
原创粉丝点击