给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。
示例 1:
输入: [3,0,1]
输出: 2
示例 2:
输入: [9,6,4,2,3,5,7,0,1]
输出: 8
说明:
你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?
class Solution {public:// 利用高斯求和公式求总和然后减去实际的总和得到确实的值/*int missingNumber(vector<int>& nums){int total_sum = nums.size() * (nums.size() + 1) / 2; // 总和int actual_sum = 0;for(int num : nums)actual_sum += num; // 实际和return total_sum - actual_sum; // 差为缺失的值}*/// 异或运算, 原理: x ^ x ^ y = yint missingNumber(vector<int> & nums){// 注意初始化missing的值为nums.size(), 因为i没法为nums.size()int n = nums.size();int missing = n;for(int i=0; i<n; ++i)missing ^= i ^ nums[i];return missing;}};
欢迎交流,批评指正!
