題目描述:給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現三次。找出那個只出現一次的元素。
說明:你的演算法應該具有線性時間的複雜度。你可以不使用額外的空間來實現嗎?
題目要求線性複雜度,一般的演算法做不到,不難想到用位運算。但怎麼進行位運算,比較難想到。
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=
1class
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實現的...