LeetCode刷題筆記 001兩數之和

2021-10-23 20:54:38 字數 1958 閱讀 3001

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。

你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。

示例:

給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

我的解題思路

1.`

public

class

solution

system.out.

println

("輸出合乎情況的陣列數值的索引");

for(

int i =

0; i < x ; i++)}

}}}

時間複雜度:o(n^2)

空間複雜度:o(1)

這種解法使用兩個for迴圈巢狀使用,遍歷陣列,得到第乙個數字,然後尋找第二個能與它相加得到目標值的數字,因為不能是本身和遍歷過的數字,而且定義的arraylist陣列是乙個有序的集合,所以第二層巢狀直接從當前數字的下乙個數字開始遍歷,然後得到了之後輸出索引就行了。

我的解法沒有加入未尋找到之後的處理方法。

其他解題思路

1.兩遍雜湊表

為了對執行時間複雜度進行優化,我們需要一種更有效的方法來檢查陣列中是否存在目標元素。如果存在,我們需要找出它的索引。保持陣列中的每個元素與其索引相互對應的最好方法是什麼?雜湊表。

通過以空間換取速度的方式,我們可以將查詢時間從 o(n)o(n) 降低到 o(1)o(1)。雜湊表正是為此目的而構建的,它支援以 近似 恆定的時間進行快速查詢。我用「近似」來描述,是因為一旦出現衝突,查詢用時可能會退化到 o(n)o(n)。但只要你仔細地挑選雜湊函式,在雜湊表中進行查詢的用時應當被攤銷為 o(1)o(1)。

乙個簡單的實現使用了兩次迭代。在第一次迭代中,我們將每個元素的值和它的索引新增到表中。然後,在第二次迭代中,我們將檢查每個元素所對應的目標元素(target - nums[i]target−nums[i])是否存在於表中。注意,該目標元素不能是 nums[i]nums[i] 本身!

class

solution

for(

int i =

0; i < nums.length; i++);

}}throw

newillegalargumentexception

("no two sum solution");

}}

在我的理解中就是把我的arraylist陣列,用查詢效率更高的雜湊表替代了,其他無什麼變化

2.一遍雜湊表

事實證明,我們可以一次完成。在進行迭代並將元素插入到表中的同時,我們還會回過頭來檢查表中是否已經存在當前元素所對應的目標元素。如果它存在,那我們已經找到了對應解,並立即將其返回。

class

solution;}

map.

put(nums[i]

, i);}

throw

newillegalargumentexception

("no two sum solution");

}}

不明白(然後查了containskey方法)

containskey

boolean containskey(object key)如果此對映包含指定鍵的對映關係,則返回 true。更確切地講,當且僅當此對映包含針對滿足 (key == null ? k == null : key.equals(k)) 的鍵 k 的對映關係時,返回 true。(最多只能有乙個這樣的對映關係)。

其實就是在遍歷陣列元素的時候,同時尋找到與之對應的元素得到返回值

Leetcode刷題筆記

1.兩數之和給定乙個整數陣列nums 和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。ps 你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。思路 用target減去nums中的每乙個數,並設立乙個字典來記錄對應的下標 class...

LeetCode刷題筆記

實現strstr 給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。示例 1 輸入 haystack hello needle ll 輸出 2 示例 2 輸入 haystack aaaa...

LeetCode刷題筆記

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...