給定一個整數數組nums
和一個目標值target
,請你在該數組中找出和爲目標值的那兩個整數,並返回他們的數組下標。
你能夠假設每種輸入只會對應一個答案。可是,你不能重複利用這個數組中一樣的元素。數組
示例:code
<pre><code> 給定 nums = [2, 7, 11, 15], target = 9 由於 nums[0] + nums[1] = 2 + 7 = 9 因此返回 [0, 1] </code></pre>事件
最容易想到的就是暴力法,使用兩個遍歷,查找兩數之和是否爲target
。流程以下:get
i
來遍歷數組每一個元素i
的每個循環中,使用j
從i + 1
開始遍歷i
和j
對應的值的和是否爲target
func twoSum(nums []int, target int) []int { for i := 0; i < len(nums); i ++ { for j := i + 1; j < len(nums); j ++{ if nums[i] + nums[j] == target{ return []int{i,j} } } } return []int{} }
該解法中會藉助一個哈希表。在遍歷數組時,會將當前元素添加到哈希表中。而且會檢查哈希表中是否已經存在當前元素所對應的目標元素。若是存在就返回。class
func twoSum2(nums []int, target int) []int { m := make(map[int]int) for i := 0; i < len(nums); i ++ { if index, exists := m[target - nums[i]]; exists { return []int{i,index} } m[nums[i]] = i } return []int{} }