劍指offer 面試題56 陣列中數字出現的次數

2021-10-08 14:29:52 字數 1193 閱讀 3073

乙個整型陣列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時 首先...