制作网站不给源代码,织梦网站下载地址,html 门户网站模板,网站制作多少钱资讯260. 只出现一次的数字 III - 力扣#xff08;LeetCode#xff09; 根据题目可知#xff1a;有两个元素只出现一次#xff0c;其余出现两次。
而在只出现一次的数字 I 里#xff0c;只有一个元素出现一次#xff0c;可以用异或的方式直接得到最后的答案#xff0c;而此…260. 只出现一次的数字 III - 力扣LeetCode 根据题目可知有两个元素只出现一次其余出现两次。
而在只出现一次的数字 I 里只有一个元素出现一次可以用异或的方式直接得到最后的答案而此题中最后会得到两个不同数字异或后的值x。a^bx
思路
1.从x中获取第一个lowbit为1的位因为两个数异或某一位结果为1的话那么这两个数在这一位上的值必定不相同。
2.根据这个不相同把原数组里的所有数分为两组分别是 这一位为0和这一位为1再定义两个变量a b分别异或一组数a b最终的结果就是两个只出现一次的元素。
注意用unsigned是因为小心取lowbit溢出问题。
class Solution {
public:vectorint singleNumber(vectorint nums) {unsigned int j0;//最后异或得到的数字for(int i0;inums.size();i){j^nums[i];}//k拿到j最低位的1unsigned int kj(-j);//count是几就是第几位有不同int count0;while(k!1){k k1;count;}int a,b0;//分组异或for(int i0;inums.size();i){if(((nums[i]count)1)0){a^nums[i];}else{b^nums[i];}}vectorint v3;v3.push_back(a);v3.push_back(b);return v3;}
};