菜鳥刷題之路 Q16

2021-10-08 07:31:13 字數 861 閱讀 7067

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。

問題用hashmap解決是很容易想到的。使用異或運算的特點也可以解決該問題。

將陣列的值作為key存入hashmap:

——1)當該值存在於hashmap中,刪除它

——2)當該值不存在加入它

最後整個hashmap中剩下的就是結果的兩個值。遍歷一次陣列即可。由於只有兩個重複的元素,所以hashmap的儲存、查詢效率都為o(1),這個比利用arraylist下標來標記的效率高很多,因為當陣列中某個數字很大時,arraylist的空間就會極大浪費。hash的方法是完全優於arraylist下標標記的方法的。

// hashmap優化 時間複雜度為o(n) 空間複雜度為o(n)

public

void

(int

array,

int num1,

int num2)

setst = hm.

keyset()

; iterator

it = st.

iterator()

; num1[0]

= it.

next()

; num2[0]

= it.

next()

;}//位運算解法 時間複雜度為o(2n) 空間複雜度為o(1)

public

void

(int

array,

int num1,

int num2)

}

菜鳥刷題之路 Q1

寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。一開始考慮轉化成位來計算,但是這樣 結構非常複雜且當出現負數時就難以計算。之後轉化思維,從十進位制數字計算的本身上來看 兩個數 ab cd 的計算過程可以看成是 a c e,b d f,如果e,f大於10,就保留ef 的個位數。如果出...

菜鳥刷題之路 Q13

問題來自牛客劍指offer 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列 現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。問題和尋找發帖水王屬於同一問題。即尋找眾數。問題可以看成是對陣列中的數進行計數。利用hashmap來作...

菜鳥刷題之路 Q17

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路採用的中序遍歷,實現的是採用非遞迴。將左指標指向前節點,右節點指向後節點。public treenode convert treenode prootoftree prootoftr...