位運算的應用 找出落單的數

2021-09-14 04:59:12 字數 779 閱讀 1674

基本描述:乙個陣列裡面除了某乙個數字之外,其他的數字都出現了兩次。設計乙個演算法去找出這個只出現了一次的數字。

要是沒學過位運算的話,估計又想著去暴力列舉了,不合適,資料量大了會很麻煩的,還是用位運算。因為陣列中只有乙個元素是不重複兩次的,用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...