前言:最近業餘時間,一直在看leetcode上面的題,上面有許多好的解題思路可以借鑑到我們真正的專案中。總之,要靜下心來認真研究,對我們無論是目前做的專案還是以後出去面試,都會有很大的幫助。題目描述
給定乙個整型陣列,要求返回兩個數的下標,使得兩數之和等於給定的目標值,要求同乙個下標不能使用兩次。
資料保證有且僅有一組解。
樣例給定陣列 nums = [2, 7, 11, 15],以及目標值 target = 9,
由於 nums[0] + nums[1] = 2 + 7 = 9,
所以 return [0, 1].
解題思路一(暴力法)
這個我們大家只要寫過一兩年**都會想到,就是兩遍for迴圈就可以搞定。
核心**如下:
//暴力方法
public
static
int[
]twosum
(int
nums,
int target);}
}}throw
newillegalargumentexception
("no two sum solution");
}
結果分析:
暴力列舉方法很簡單:兩重迴圈列舉下標 i,j,然後判斷nums[i]+nums[j]nums[i]+nums[j] 是否等於 targettarget。時間複雜度:由於有兩重迴圈,所以複雜度是 o(n2)。
解題思路二(使用map)
核心**如下:
//雜湊表
public
static
int[
]twosummap
(int
nums,
int target);}
map.
put(nums[i]
,i);
}throw
newillegalargumentexception
("no two sum solution");
}
使用map時候可能大家會有疑問,如果遇到這樣資料會出現問題,這一點我們做個小實驗就可以看出是否有問題。
public
static
void
main
(string[
] args)
;int
twosum =
twosummap
(nums,4)
; system.out.
println
(arrays.
tostring
(twosum));
}
結果為:[1, 4]
通過以上結果看出,如果出現重複的資料不會出現問題。
leetCode刷題 兩數之和
兩數之和 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums...
leetCode刷題 兩數之和
兩數之和 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums...
LeetCode刷題 兩數之和
給定乙個整數陣列nums和乙個整數目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並返回它們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。你可以按任意順序返回答案。示例 1 輸入 nums 2,7,11,15 target 9 輸出 0,1 解釋...