LeetCode137只出現一次的數字 位運算

2022-05-02 10:51:06 字數 970 閱讀 6481

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

說明:你的演算法應該具有線性時間的複雜度。你可以不使用額外的空間來實現嗎?

題目要求線性複雜度,一般的演算法做不到,不難想到用位運算。但怎麼進行位運算,比較難想到。

b = (b ^ x) & ~a;

a = (a ^ x) & ~b;

^ 相當於除去原有元素,新增新元素,a &

~  b 相當於從a集合中除去b集合中的所有元素。

int len =nums.size();

for(int i =0;i < len;++i)

出現一次的存在b中,第二次出現從b中清除同時會存在a中,第三次出現會從b中清除。最終出現一次的都存在b中,出現兩次的都存在a中

例如:[1,2,2,1,1,2,99]

b=a=

1

class

solution

9return

a;10}11

};12

13static

const auto __lamda =() ();

朋友面試竟然遇到了,前面的演算法很講究技巧性,不通用,補充乙個較通用的方法:

int陣列,32位,用乙個32位的int陣列,每一位記錄值在該位出現1的次數。

其餘元素出現3次,最後加起來肯定 %3 = 0。剩下的就是只出現一次的。

int bits[32

];int singlenumber(vector&nums)

}for(int i = 0;i < 32;i++)

if(bits[i] % 3) res += (1

res;

}

1. 2. 

Leetcode137 只出現一次的數字

題目描述 給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,3,2 輸出 3 示例 2 輸入 0,1,0,1,0,1,99 輸出 99 思路 對數字中數...

leetcode 137 只出現一次的數字 II

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?這種純數字計算的問題,如果我們只用加減乘除就能做出來,那leetcode就太low了,這種問題,應該深入到位級別運算。思考,將...

leetcode137 只出現一次的數字詳解

原題連線 給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,3,2 輸出 3 示例 2 輸入 0,1,0,1,0,1,99 輸出 99 3 函式f實現的...