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; }