2015年8月29日星期六

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.


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

2.Bitwise operation solution
public int MissingNumber(int[] nums) {
    int xorResult = 0;
    for(int i = 0; i < nums.Length; i++)
        xorResult ^= nums[i] ^ i;
    xorResult ^= nums.Length;
    return xorResult;
}
3.Math solution by sum total
public int MissingNumber(int[] nums) {
    int result = nums.Length * (nums.Length + 1) / 2;
    for(int i = 0; i < nums.Length; i++)
        result -= nums[i];
    return result;
}

没有评论:

发表评论