标签:代码 不同的 标准 i+1 uid down == 亦或 inline
我们知道,两个相同的数字进行^
操作,得0.假设本题中只出现一次的数字分别为a和b.
那末,在本题中全体数字取^
将得到什么呢?没错,是a^b
.我们算法的思想是完成以下两条:
&
是否可以为分类标准?都可以!所以想想如何满足1.class Solution {
public:
vector<int> singleNumbers(vector<int>& nums) {
int a = 0, b = 0; // a和b是只出现一次的数字,先初始化为0
int rt = 0;
for(auto i:nums) {
rt ^= i; // 全体取亦或,相同的数字亦或和为0.那末,最后的结果就是所求的两个数字的亦或
} // ①其中的某位如果为1,说明a与b的这一位是不同的
int divid = 1; // 二进制形式为0000..1
while((divid & rt) == 0) divid <<= 1; // 0000..0001 -> 0000..0010 -> 0000..0100 ...
for(auto i:nums) { // 直至找到divid为1这位正好对准rt中为1的那一位
if(divid & i) a ^= i; // rt某位为1的意义??见标注①
else b ^= i;
}
return vector<int>{a,b};
}
};
标签:代码 不同的 标准 i+1 uid down == 亦或 inline
原文地址:https://www.cnblogs.com/tsuipo/p/12791490.html