难度中等
给定一个整数数组 nums
,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?
示例 1:
输入:nums = [1,2,1,3,2,5] 输出:[3,5] 解释:[5, 3] 也是有效的答案。
示例 2:
输入:nums = [-1,0] 输出:[-1,0]
示例 3:
输入:nums = [0,1] 输出:[1,0]
1、 如何求末尾最后1个1
cur= 01011100
-cur= ^cur+1=10100100
cur & -cur =00000100
2、根据末尾最后一个1将数组分组
class Solution { public: vector<int> singleNumber(vector<int>& nums) { vector<int>res(2,0); int aaor = 0; for(int num : nums) { aaor ^= num; } int last_bit = (aaor == INT_MIN ? aaor : aaor & (-aaor));//如何求末尾最后1个1 for(auto num:nums) { // 注意位运算与 != 的优先级 if((num & last_bit)!=0) { res[0] ^= num; } else { res[1] ^= num; } } return res; } };
标签:数字,nums,int,示例,aaor,260,num,III,cur From: https://www.cnblogs.com/zle1992/p/16641145.html