268. Missing Number

题目:未排序的数组从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 };

 

posted @ 2020-03-01 12:09  habibah_chang  阅读(136)  评论(0)    收藏  举报