给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。
    示例 1:
    输入: [3,0,1]
    输出: 2

    示例 2:
    输入: [9,6,4,2,3,5,7,0,1]
    输出: 8

    说明:
    你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?

    1. class Solution {
    2. public:
    3. // 利用高斯求和公式求总和然后减去实际的总和得到确实的值
    4. /*
    5. int missingNumber(vector<int>& nums)
    6. {
    7. int total_sum = nums.size() * (nums.size() + 1) / 2; // 总和
    8. int actual_sum = 0;
    9. for(int num : nums)
    10. actual_sum += num; // 实际和
    11. return total_sum - actual_sum; // 差为缺失的值
    12. }
    13. */
    14. // 异或运算, 原理: x ^ x ^ y = y
    15. int missingNumber(vector<int> & nums)
    16. {
    17. // 注意初始化missing的值为nums.size(), 因为i没法为nums.size()
    18. int n = nums.size();
    19. int missing = n;
    20. for(int i=0; i<n; ++i)
    21. missing ^= i ^ nums[i];
    22. return missing;
    23. }
    24. };

    欢迎交流,批评指正!