描述
給定一個數組,只有一個數字重複一次,其他數字重複兩次,找出重複一次的數字。
Solution 1
用到異或(^)的幾個性質:
順序無關:即滿足交換律。
同一個數異或兩次等於沒有異或:如4 ^ 3 ^ 4 = 3。
一個數與0異或的結果爲其本身:如3 ^ 0 = 3。
result初始值爲0,將數組中每個元素都與result作異或並更新result,最終result的值就是那個唯一隻出現一次的元素了。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int res;
for(int i=0;i<nums.size();i++)
res ^= nums[i];
return res;
}
};
Solution 2
也可以使用single number 2的思路。將3改成2即可。
class Solution
{
public:
int singleNumber(vector<int> &nums)
{
int res = 0;
for (int i = 0; i < 32; i++) //遍歷每一個數字的每一位數字
{
int sum = 0;
for (int j = 0; j < nums.size(); j++) //遍歷數組中每一個數字
{
//將數字第i位取出來,累計到sum中
sum = sum + ((nums[j] >> i) & 1);
}
// 如果某一位出現2次則模3後會成爲0
sum %= 2;
// 將模2後的第i位填充到res中
res = res | (sum << i);
}
return res;
}
};
————————————————
版權聲明:本文爲CSDN博主「sunlanchang」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/sunlanchang/article/details/86776646