1.乙個整型陣列,有乙個數字出現一次,其餘數字出現兩次,找出這個只出現一次的數字。
解題思路:異或運算性質(兩個相同的數字異或得0,0與乙個數字異或得數字本身,而且異或運算是滿足交換律的)
陣列元素按位異或,(交換律可以想象成相同的數字參與運算的時候是相鄰的)所有出現兩次的數字異或之後得0,最後剩餘的是0與出現一次的數字異或,所以最後的結果就是出現一次的數字
2.乙個整型陣列,其他數字出現三次,只有乙個數字出現一次,找出這個出現一次的數字。
結題思路:
思路一:考慮位運算,將各個數字的二進位制按位相加,對3取模,最後為1的位組合起來就是只出現一次的數字。
public int singlenum(int array)
{ int temp = 0;
for(int i=0; i<32; i++) {
int bits = 0;
for(int j=0; j>i) & 0x1; //每次取一位
temp |= (bits%3)《思路二:設定三個變數,分別記錄出現一次的位數和出現兩次及三次的位數,分別為one two three ,初值均為0,針對陣列中的每乙個數a[i],
出現一次(所有奇數次的數字):異或操作可以實現,one^=a[i](最後保留為1 的位是對應出現奇數次的位)
出現兩次:看前面是否出現過,因此two |= (one & a[i]) 用 | 運算是保留每次算出的結果
出現三次:出現奇數次且至少出現兩次,因此three = (one & two)
最後,one中出現三次的數字為one^=three
two中出現三次的數字為two^=three
所以,出現一次的數字為最後的one。
public int singlenumber(int a) {
int one = 0;
int two = 0;
int three = 0;
for(int i=0; i
只出現一次的數字
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1示例 2 輸入 4,1,2,1,2 輸出 4核心思想 對list排序,然後遍歷 class ...
只出現一次的數字
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素 例 1,2,2 1 方法一 異或 數字1 數字2 每一位如果相同就為0,不同為1 1 1 0 1 0 1 0 1 1 0 0 0 class solution def singlenumber se...
只出現一次的數字
題目描述 線性的時間複雜度,即為o n 不使用額外輔助空間,即空間複雜度為o 1 異或運算 針對二進位制而言的,如果是十進位制,需要先轉化為二進位制,然後再進行運算,相同為0,不同為1 如果十進位制相同,二進位制必然也相同,0跟任何數異或運算,結果為那個數本身,題目中說除了某個元素只出現一次以外,其...