暑期第一周演算法題(一)

2021-10-08 05:42:26 字數 1666 閱讀 8170

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。

說明:你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?

示例 1:

輸入:[2

,2,1

]輸出:

1

示例 2:

輸入:[4

,1,2

,1,2

]輸出:

4

1.基礎思路:

我們可以遍歷陣列中的每個數字,如果集合中沒有該數字,則將該數字加入集合,如果集合中已經有該數字,則將該數字從集合中刪除,最後剩下的數字就是只出現一次的數字。但我們會發現這樣進行運算的話需要額外使用 o(n) 的空間,其中 n 是陣列長度,題目對其進行了限制,所以不能進行這樣的運算。

2.高階思路:

雜湊表(hash table,也叫雜湊表),是根據關鍵碼值(key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。使用雜湊表儲存每個數字和該數字出現的次數。遍歷陣列即可得到每個數字出現的次數,並更新雜湊表,最後遍歷雜湊表,得到只出現一次的數字。這樣進行運算的話也需要額外使用 o(n) 的空間,其中 n 是陣列長度。

3.解決方案:

異或運算:

我們可以知道

0^0

=00^

1=11

^1=0

由此可以發現相同數字作異或運算值為零。

我們觀察題目;

第乙個案例:[2,2,1]。

第乙個和第二個數字2:二進位制為000010,第三個數字1:二進位制為000000。由此先將第乙個和第二個數字進行異或運算:即000000,再將這個數字與第三個數字進行異或運算,得到000001。我們可以得到最終結果1.

第二個案例: [4,1,2,1,2]。

4的二進位制:000100,1的二進位制:000001,2的二進位制:000010

以此類推,4與1異或運算得到:000101,再與2異或運算:000111,再與1異或運算:000110,再與2異或運算000100得到最終結果4.

**如下:

class

solution

return num[0]

;}}

給定乙個非負整數 c ,你要判斷是否存在兩個整數 a 和 b,使得 a2 + b2 = c。

示例1:

輸入:

5輸出: true

解釋:1*1

+2*2

=5

示例2:

輸入:

3輸出: false

1.思路:

給定乙個數字c,要求是否有兩個數的平方和為它,我們的思路是這樣的,從1開始遍歷數字,每乙個數字做一次迴圈,再這個數字的條件下尋找是否存在數字b滿足其條件,迴圈終止的條件是a的平方大於等於了c,這樣的話也就不存在b了。

2.**如下:

public

class

solution

return

false;}

}

演算法,第一周

題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1...

2019暑期集訓第一周小結

特點 一輪搜尋完成後,清空標記陣列的問題 在搜尋的過程中,需要借助標記陣列,來防止重複的訪問。之前採取的方法是,通過標記為1,表示該值被訪問過。但是這樣做不適合多輪的搜尋,因為每輪搜尋結束後,都需要重新把標記陣列清零。解決 每輪搜尋都設定乙個唯一的值 不再侷限於1和0 標記陣列的本質是通過設定不同的...

2013暑期第一周周賽G題 錯誤總結

description let s call a number k good if it contains all digits not exceeding k 0,k you ve got a number k and an array a containing n numbers.find ou...