企业信用信息公示系统福建,seo技术优化技巧,迪庆企业网站建设公司,vps如果制作论坛网站1. 题目
给定一个整数数组 nums#xff0c;其中恰好有两个元素只出现一次#xff0c;其余所有元素均出现两次。 找出只出现一次的那两个元素。
示例 :输入: [1,2,1,3,2,5]
输出: [3,5]注意#xff1a;
结果输出的顺序并不重要#xff0c;对于上面的例子#xff0c; [5,…1. 题目
给定一个整数数组 nums其中恰好有两个元素只出现一次其余所有元素均出现两次。 找出只出现一次的那两个元素。
示例 :输入: [1,2,1,3,2,5]
输出: [3,5]注意
结果输出的顺序并不重要对于上面的例子 [5, 3] 也是正确答案。 你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现
类似题目 LeetCode 137. 只出现一次的数字 II位运算 LeetCode 136. 只出现一次的数字异或^
2. 解题
先将所有数字异或等同于那2个不同的数异或 bit在将上面结果取负并与自己与 bit bit -bit得到 bit 为1的最低位即那2个数不同的二进制位在将给的数组每个数与 bit 将数组分成2部分2部分各自做异或^ 即可得到2个数
关于第二步的举例8,13 1000 1101 ^ 0101 bit bit -bit 0001
假如 bit 1100 bit -bit 0100得到的是最低位的1
class Solution {
public:vectorint singleNumber(vectorint nums) {int bit 0, i, n1 0, n2 0;for(i 0; i nums.size(); i)bit ^ nums[i];bit (-bit);for(i 0; i nums.size(); i){if((bit nums[i]) 0)//内层括号不能少n1 ^ nums[i];elsen2 ^ nums[i];}return {n1, n2};}
};