LeetCode: 268. Missing Number

来源:互联网 发布:gtx950m4g独显数据 编辑:程序博客网 时间:2024/06/07 06:25

LeetCode: 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.

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

Credits: Special thanks to @jianchao.li.fighter for adding this
problem and creating all test cases.

自己的答案,13ms:

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

最快的答案,1ms:

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

3 different ideas: XOR, SUM, Binary Search. Java code
xor:

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

求和:

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

二分查找:

public int missingNumber(int[] nums) { //binary search    Arrays.sort(nums);    int left = 0, right = nums.length, mid= (left + right)/2;    while(left<right){        mid = (left + right)/2;        if(nums[mid]>mid) right = mid;        else left = mid+1;    }    return left;}