力扣645 错误的集合 位运算

    技术2022-07-21  70

    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}; } };

     

    Processed: 0.009, SQL: 9