给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。
说明: 你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?
使用等差数列
class Solution { public: int missingNumber(vector<int>& nums) { int cnt = (nums.size()+1)*nums.size()/2; for(int i=0; i<nums.size(); i++) { cnt -= nums[i]; } return cnt; } };
一行代码
class Solution { public: int missingNumber(vector<int>& nums) { return nums.size()*(nums.size()+1) / 2 - accumulate(nums.begin(), nums.end(), 0); } };
使用位运算:异或
class Solution { public: int missingNumber(vector<int>& nums) { int res=nums.size(); for(int i=0;i<nums.size();i++) { res^=nums[i]; res^=i; } return res; } };