Single Number III问题及解法

来源:互联网 发布:经营杠杆的理解知乎 编辑:程序博客网 时间:2024/05/24 06:49

问题描述:

Given an array of numbers nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.

示例:

Given nums = [1, 2, 1, 3, 2, 5], return [3, 5].

Note:

  1. The order of the result is not important. So in the above example, [5, 3] is also correct.
  2. Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?
问题分析:

通过异或,可得两个只出现一次的值a和b的异或值,然后我们利用异或值把原数组分成两组,每组分别异或,最终可得答案。


过程详见代码:

class Solution {public:vector<int> singleNumber(vector<int>& nums) {int diff = accumulate(nums.begin(),nums.end(),0,bit_xor<int>());diff &= -diff; // 找到两者按位异或为1的某一位,其余位置0vector<int> res = {0,0};for (int num : nums){if ((num & diff) == 0) // 分组{res[0] ^= num;}else res[1] ^= num;}return res;}};


原创粉丝点击