题目:未排序的数组从0~n,依次增大的数列中缺少了一个数,是哪个?
方法一:高斯算法
等差数列求和,0~size()+1个数列的和 - 实际给定的数列的和 = 要求数字
参考代码:
1 class Solution { 2 public: 3 int missingNumber(vector<int>& nums) { 4 int sum = (0 + nums.size()) * (nums.size()+1) /2; 5 int realsum = 0; 6 for(int i : nums){ 7 realsum += i; 8 } 9 return sum-realsum; 10 } 11 };
方法二:位置 异或 数值
Index | 0 | 1 | 2 | 3 |
---|---|---|---|---|
Value | 0 | 1 | 3 | 4 |
missing=4∧(0∧0)∧(1∧1)∧(2∧3)∧(3∧4) = size() ∧ (各位置∧各数值) =(4∧4)∧(0∧0)∧(1∧1)∧(3∧3)∧2 =0∧0∧0∧0∧2 =2
参考代码:
1 class Solution { 2 public: 3 int missingNumber(vector<int>& nums) { 4 int len = nums.size(); 5 for(int i=0; i<nums.size(); i++){ 6 len ^= (nums[i] ^ i); 7 } 8 return len; 9 } 10 };