阿里一面的時候被問到了,答得不太好,也完全沒想到異或的方法。果然一查狀態就涼了。題目:
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
說明:你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例1:
輸入: [2,2,1]示例2:輸出: 1
輸入: [4,1,2,1,2]一:先排序,再使用雙指標進行對比輸出: 4
時間複雜度o(nlogn),空間複雜度o(1)
class solution
return nums[nums.
size()
-1];
}};
一:雜湊集
若該陣列第一次出現,則插入雜湊集中。
第二次出現,在雜湊集中刪除。
最後剩下的數字就是只出現一次的數字。
時間複雜度o(n),空間複雜度o(n)
class solution
for(
auto j:bobo) ans = j;
return ans;}}
;
三:異或
任何乙個數字異或自己等於0。應此,我們可以從投到尾異或陣列中的每乙個數字,最終達到的結果剛好是只出現了一次的數字。
時間複雜度o(n),空間複雜度o(1)。
class solution
return ans;}}
;
領扣137.只出現一次的數字
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。
說明:你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 1:
輸入: [2,2,3,2]
輸出: 3
示例 2:
輸入: [0,1,0,1,0,1,99]
輸出: 99
/*
1.位運算求解此題;
2.如果把所有出現三次的數字的二進位制表示的每一位加起來,那麼每一位都能被3整除;
3.如果某一位的和能被3整除,那麼只出現一次數字的二進位制位中對應的那一位就是0,否則就是1;
*/public
intsinglenumber
(int
nums)
}int result =0;
for(
int i =
31; i >=
0; i--
)return result;
}
136 只出現一次的數字
一.題目 給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1示例 2 輸入 4,1,2,1,2 輸出 4二.思路及 法1.使用hash tab...
136 只出現一次的數字
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1 示例 2 輸入 4,1,2,1,2 輸出 4 異或運算滿足交換律,如a b c等同於c b...
136 只出現一次的數字
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1 示例 2 輸入 4,1,2,1,2 輸出 4 c int singlenumber int...