Single Number III

来源:互联网 发布:js正则判断是否是数字 编辑:程序博客网 时间:2024/06/03 19:54

Single Number III:

做了Single Number I 还是不会做这道题。原来还是用异或运算提取了两个只出现一次的整数的信息,利用这个信息把数组分成两部分。

考虑位操作,对所有元素做异或操作,那么最后得到的值就是要求的两个元素异或得到的,那么找出其中为1的某一位,说明这一位两个数一个为0,一个为1,以这一位为标准,把数组的元素分为两组A、B,那么要求的两个元素肯定是一个在A组,一个在B组,而对这两组各自做异或操作,就可以得到要求结果。

这里面还有一个很巧妙的地方是,使用n&(~(n-1))可以取出元素的最后一个1的位置。

class Solution {public:vector<int> singleNumber(vector<int>& nums) {int ntmp = 0;for (int cnt = 0; cnt<nums.size(); cnt++){ntmp ^= nums[cnt];}int spec_bit = ntmp & (~(ntmp - 1));int a = 0, b = 0;for (int cnt = 0; cnt < nums.size(); cnt++) {if (spec_bit & nums[cnt])a ^= nums[cnt];elseb ^= nums[cnt];}return vector<int>({ a,b });}};


0 0
原创粉丝点击