题目:
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?
Time Complexity - O(n), Space Complexity - O(1)
class Solution {
public int missingNumber(int[] nums) {
//Lets defeat this in a smart mathematic way
int actualsum = 0, sum = 0;
int length = nums.length;
for(int num:nums){
actualsum += num;
}
sum = (length+1)*length/2;
//Remember the equation to get the sum of a ascending ordered array
return sum - actualsum;
}
}
Solution2:异或运算xor,
0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0
Time Complexity - O(n), Space Complexity - O(1)
class Solution {
public int missingNumber(int[] nums) {
if(nums == null || nums.length == 0) {
return 0;
}
int res = nums.length; // nums.length = n
for(int i = 0; i < nums.length; i++) {
res = res ^ i;
res = res ^ nums[i];
//0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0
//最后出来的数字是缺的那个数字
}
return res;
}
}