只出現一次的數

2021-09-02 17:46:24 字數 1409 閱讀 3701

問題描述

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。

解決思路

將陣列中元素全部異或,根據異或特點,出現兩次的元素異或後結果為0,陣列全部異或之後的結果就是只出現一次的那個元素。

**實現

int

singlenumber

(vector<

int>

& nums)

return num;

}

問題描述

給定乙個非空整數陣列,有某兩個個元素只出現一次以外,其餘每個元素均出現兩次。找出那兩個只出現了一次的元素。

解決思路

與只出現乙個數的情況類似,先對整個陣列整體異或,異或得到的結果就是那兩個出現一次的元素的異或,找到異或結果的最後一位為1的位置,再根據這個位置對陣列進行分組,確保每個組只有乙個只出現一次的元素,再整體對這個組進行異或得到結果。

**實現

void

singlenumber2

(vector<

int>

& nums)

int i =0;

for(

; i <

32; i++)}

for(

int j =

0; j < size; j++

)else}

cout << x <<

" "<< y << endl;

}

問題描述

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現三次。找出那個只出現了一次的元素。

解決思路

可以用位運算來解決這個問題,在這個陣列中,只有乙個是只出現一次,其他的數都是出現三次,也就是說每個位元位1的個數是3x或者3x+1或者為0,基於這個準則,我們可以設定乙個計數器,讓陣列中的每個數的相同位元位進行與運算,只要為一計數器++,最終模3,只要不為0就說明單獨出現的數這個位元位就為1

**實現

int

singlenumber3

(vector<

int>

& nums)

int count, result =0;

for(

int i =

0; i <

32; i++)}

if(count %3==

1)}return result;

}

只出現一次的數

給定乙個整數陣列 nums,其中恰好有兩個元素只出現一次,其他所有元素均出現兩次。找出只出現一次的那兩個元素。示例 給定 nums 1,2,1,3,2,5 返回 3,5 注意 結果的順序並不重要,對於上面的例子 5,3 也是正確答案。你的演算法應該具有線性複雜度,你能否僅使用恆定的空間複雜度來實現它...

只出現一次的數

問題 有n個數,其中只有乙個數出現一次,其他的都出現兩次,求這個數 空間複雜度為常數 全部xor起來即可 include includeusing namespace std int main printf d n xor sum return 0 1231 3 1 51 2 3 2 3 inclu...

陣列中只出現一次的數

首先看看題目要求 陣列 a中,除了某乙個數字 x之外,其他數字都出現了三次,而 x出現了一次。請給出最快的方法找到x。這個題目非常有意思,在本人部落格中有 位操作基礎篇之位操作全面總結 這篇文章介紹了使用位操作的異或來解決 陣列中其他數字出現二次,而x出現一次,找出x。有 這邊文章介紹了分組異或的方...