乙個整型陣列nums
裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o(n),空間複雜度是o(1)。
輸入:nums = [4,1,4,6]
輸出:[1,6] 或 [6,1]
輸入:nums = [1,2,10,4,1,4,3,3]
輸出:[2,10] 或 [10,2]
字典
時間複雜度是o(n)
, 空間複雜度是o(n)
。
class solution
};
異或
時間複雜度是o(n)
, 空間複雜度是o(1)
。
第一次異或的結果res相當於兩個單獨出現數字的異或,相同的數字異或結果都為0。
res最少有乙個位為1,則求出最右邊的那個為1的位,得到mask。
每個數字都跟mask相與。
乙個數字最右邊的那一位是1,另乙個數字為0。
那麼每個數字和mask相與,根據結果為0或1,就可以區分出兩個數字。
class solution
return;}
};
在乙個陣列nums
中除乙個數字只出現一次之外,其他數字都出現了三次。請找出那個只出現一次的數字。
輸入:nums = [3,4,3,3]
輸出:4
輸入:nums = [9,1,7,9,7,9,7]
輸出:1
字典
時間複雜度是o(n)
, 空間複雜度是o(n)
。
class solution
};
有限狀態自動機
class solution
return ones;}}
;
記錄法
記錄每一位出現的次數,出現三次的一定能被3整除。
class solution
if(cnt %3==
1) ans |=(
1<< i);}
return ans;}}
;
劍指 offer 系列 面試題5, 6
面試題 5 替換空格 思路一 時間複雜度為 o n2 的解法。考慮怎麼替換的操作,最直觀的方法是從頭到尾掃瞄字串,每次碰到空格後進行替換。由於是把 1 個字元替換成 3 個字元,必須將後面的向後移兩個位元組。假設字串的長度是 n。對每個空格字元,需要移動後面 o n 個字元,因此對於含有 o n 個...
劍指offer 面試題56 陣列中數字出現的次數
問題1 陣列中只出現一次的兩個數字 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。2 nums 10000 思路 異或 首先,對陣列的每個數字依次進行異或,得到異或後的結果value。然後,記value最右邊第一位為1的位為i,依據第i位為1 0將陣列分...
《劍指offer》陣列相關面試題
在乙個長度為n的陣列裡所有數字都在0 n 1範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複,也不知道重複了幾次,請找出陣列中任意乙個重複的數字。例如,長度為7的陣列,那麼對應的輸出應該是重複的數字2或者3.思路 重排這個陣列,從頭到尾依次掃瞄這個陣列中的每個數字。掃到下標為i的數字m時 首先...