基本描述:乙個陣列裡面除了某乙個數字之外,其他的數字都出現了兩次。設計乙個演算法去找出這個只出現了一次的數字。
要是沒學過位運算的話,估計又想著去暴力列舉了,不合適,資料量大了會很麻煩的,還是用位運算。因為陣列中只有乙個元素是不重複兩次的,用0去一次與陣列元素進行異或,出現兩次的數異或之後為0,只出現了一次的數便求出來了,這樣做時間和空間都比暴力節省不少。不多逼逼,放**。
#include
#include
using namespace std;
intmain()
a[n-1]
=1;for
(int i =
0; i < n; i++
) cout << a[i]
<<
" ";
cout << endl;
int x =0;
for(
int i =
0; i < n; i++
) x = x ^ a[i]
;//核心
cout <<
"唯一落單的數:"
<< x << endl;
return0;
}
這裡因為要生成1000個兩兩重複的數,懶得去手輸,直接for賦值了,這樣生成的數都是奇數,在最後乙個單元去賦乙個偶數,這樣最後這個數就變成了唯一不重複的數,用0去依次做異或運算便可得到結果。
演算法很美 位運算 找出落單的那個數
上級目錄 演算法很美 乙個陣列裡除了某乙個數字之外,其他的數字都出現了兩次。請寫程式找出這個只出現一次的數字。異或的運算是a a 也就是說偶數個相同的元素異或,結果肯定是 a a a a,也就是說奇數個相同元素異或,結果是a本身。那麼根據上面的思路,我們可以設陣列 現兩次的元素為a組元素,一次的為b...
找出落單出現的那個數字
題目描述 乙個陣列除了某乙個數字只有乙個外,其餘的數字都是成對出現的 求出這個落單的數字 思路 使用異或的特性,可以抵消陣列中相同的數字,則剩下的哪個數字就是落單的數字 示例 乙個陣列除了某乙個數字只有乙個外,其餘的數字都是成對出現的 public class unique number integ...
基礎演算法 位運算 找出奇特的數
leetcode 裡面有兩道關於找出落單的數的題 single number 和 single number ii single number 這道題是讓找出乙個陣列裡唯一乙個落單的數,其餘的數都出現了2次 這道題首要想到的是異或,因為異或的性質中有a a 0 0 a a,這樣就能找出那個只出現的1...