1、https://leetcode-cn.com/problems/set-mismatch/solution/cyi-huo-fa-xiang-jie-by-feng-feng-19/
边界条件的设定很难想到
t = sum & -sum
https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/solution/zong-he-guan-fang-jie-shi-he-ge-wei-da-lao-jie-shi/
主站136,137,260,645,程序员面试金典17_19是类似的位运算。
其中136比较基础,260与本题相似,137比较复杂,645与程序员面试金典17_19相似。
class Solution { public: vector<int> findErrorNums(vector<int>& nums) { int sum = 0; int n = nums.size(); for(int i = 0; i < n; i++) { sum ^=(i+1)^nums[i]; } int t = sum & (-sum); int xor1 = 0; int xor2 = 0; for(int i = 1; i <= n; i++) { if(i&t) { xor1 ^=i; }else{ xor2 ^=i; } } for(int i = 0; i < n; i++) { if(t&nums[i]) { xor1 ^=nums[i]; }else{ xor2 ^=nums[i]; } } if(count(nums.begin(),nums.end(),xor1) == 0) { return vector<int>{xor2,xor1}; } return vector<int>{xor1,xor2}; } };