位操作 leetcode 260. Single Number III

来源:互联网 发布:斯坦福大学知乎 编辑:程序博客网 时间:2024/05/16 04:33

原题链接:SIngle Number III


题解:

class Solution {public:    vector<int> singleNumber(vector<int>& nums) {        /*            这道题唯一的关键点在于:确定一个可以区分a b的元素,a^b的情况下,这里找出了最右边的1,也就是a 和 b不同的一位            采用的是 res^(~(res-1))            Time Complexity:O(N)            Space Complexity:O(1)        */        int res=0;        for(int i=0;i<nums.size();i++)res^=nums[i];        int x=0,y=0;        int mask=res&(~(res-1));        for(int i=0;i<nums.size();i++){            if(mask&nums[i])x^=nums[i];            else y^=nums[i];                     }        return vector<int>{x,y};              }};


原创粉丝点击