神奇的亦或

2022-08-15 06:57:14 字數 1137 閱讀 1884

一、乙個整數陣列,只有唯一乙個元素出現一次,其他的元素都出現兩次,找出這個元素。

解析:根據a^a=0,只需將所有的元素亦或起來,得到的結果就是該元素。以leetcode 136.為例,**如下:

class solution {

public:

int singlenumber(vector& nums) {

int ans=0;

for(int i=0;i二、乙個整數陣列,有兩個不同的元素各出現一次,其他元素均出現兩次,找出這兩個元素。

解析:設要求的兩個元素為x、y。將所有元素的亦或起來,便得到這兩個元素的亦或運算值,並且這個值一定不是0,即,在某位位元位(假設第k位)上值是1。所以根據第k位上的值將陣列中的元素分成兩部分,分別亦或起來得到的兩個值便是x和y的值。以leetcode 260.為例,**如下:

class solution {

public:

vectorsinglenumber(vector& nums) {

vectorans;

int a=0;

for(int i=0;i三、有乙個長度為n+1的陣列,其中的元素是0~n這n+1個數。現在,這個陣列中丟失了乙個元素,請找回這個元素。

解析:這道題太簡單了。。。以leetcode 268.為例,**如下:

class solution {

public:

int missingnumber(vector& nums) {

int xor1=0;

for(int i=0;i四、乙個整數陣列中,只有元素x出現一次,其他元素均出現三次,找到這個元素。

解析:對於32位以內的每乙個整數,這32個位元位構成的0-1組合是唯一的。所以,當某個數出現三次,那麼他的每一位元位上的數字累加和應為3的倍數,所以將所有數的數字上的值累加起來,如果哪一位上的和模3等於1,那麼x就在這一位上取值。以leetcode 137.為例,**如下:

class solution {

public:

int singlenumber(vector& nums) {

int *a=new int[32];

fill(a,a+32,0);

for(int i=0;i這是乙個通法,如果其他元素出現次數是其他的值,這種方法依然有用!!!

389 找不同(亦或運算)

package test 389.找不同 給定兩個字串 s 和 t,它們只包含小寫字母。字串 t 由字串 s 隨機重排,然後在隨機位置新增乙個字母。請找出在 t 中被新增的字母。示例 輸入 s abcd t abcde 輸出 e 解釋 e 是那個被新增的字母。public class number ...

兩情相悅,亦或情投意合

經常在想,到底是什麼原因使兩個人相識,相戀,相愛,最終走到一起,牽手步入婚姻殿堂,最終執子之手,與子皆老,一起走過一生呢?是兩情相悅,還是有共同的興趣愛好,有共同的人生想法呢?昨天與小豬通 無意間談到這個話題,談論了有半個小時左右。結果是我們都很不開心,心裡懷著一種不快的情緒睡覺去了。記得小豬常說,...

神奇的中醫!神奇的文化!

本草備要 中載 王荊公患偏頭痛,搗萊服汁,仰臥,左痛注右鼻,右痛注左鼻,或兩鼻齊注,數十年患,二註而愈。其中所說萊菔汁就是蘿蔔汁。上邊這段話好人的部落格上都有,但是不知道有幾個人嘗試過,我因長期患偏頭疼終無良方,今天下定決心試上一試,據說中西醫對 頭疼均沒有什麼特效藥物,於是我的偏頭疼也伴隨我十幾年...