268. 缺失数字

 1 //[3,0,1] + [0,1,2,3] = [0,0,1,1,2,3,3] ——> 求异或
 2 class Solution 
 3 {
 4 public:
 5     int missingNumber(vector<int>& nums) 
 6     {
 7         int n = nums.size();
 8         int res = 0;
 9         for(int i = 0;i <= n;i ++) nums.push_back(i);
10         for(int i = 0;i < nums.size();i ++) res ^= nums[i];
11         return res;
12     }
13 };

 

 1 //[3,0,1] + [0,1,2,3] = [0,0,1,1,2,3,3] ——> 求异或
 2 class Solution 
 3 {
 4 public:
 5     int missingNumber(vector<int>& nums) 
 6     {
 7         int n = nums.size();
 8         int res = 0;
 9         res ^= n;
10         for(int i = 0;i < nums.size();i ++) res ^= (nums[i] ^ i);
11         return res;
12     }
13 };

 

 1 //利用等差数列求和来寻找差值
 2 class Solution 
 3 {
 4 public:
 5     int missingNumber(vector<int>& nums) 
 6     {
 7         int n = nums.size();
 8         // 公式:(首项 + 末项) * 项数 / 2
 9         int expect = (0 + n) * (n + 1) / 2;
10 
11         int sum = 0;
12         for (int x : nums) sum += x;
13         return expect - sum;
14     }
15 };

 

 1 //利用等差数列求和来寻找差值
 2 class Solution 
 3 {
 4 public:
 5     int missingNumber(vector<int>& nums) 
 6     {
 7         int n = nums.size();
 8         int res = 0;
 9 
10         // 索引和元素的差加起来
11         for (int i = 0; i < n; i++) 
12             res += i - nums[i];
13         
14         // 新补的索引
15         res += n - 0;
16         return res;
17     }
18 };

 

posted @ 2020-04-15 10:26  Jinxiaobo0509  阅读(137)  评论(0)    收藏  举报