1. 程式人生 > 實用技巧 >兩數之和

兩數之和

題目:

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

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

示例:

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

因為 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]

解題思路:

雜湊表法

通過以空間換取速度的方式,我們可以將查詢時間從 O(n) 降低到 O(1)。雜湊表正是為此目的而構建的,它支援以近似恆定的時間進行快速查詢。

我們可以將每個元素的值和它的索引新增到雜湊表中,然後在遍歷時檢查每個元素對應的目標元素(target - nums[i])是否存在於表中。

注意⚠️,該目標元素不能是 nums[i] 本身!

//go
func twoSum(nums []int, target int) []int {
    result := make([]int, 0)
    m := make(map[int]int)
    for i,k := range nums{
  // 判斷map中是否存在key為[target - k]的值
  if value,exist := m[target - k];exist && value != i{
   // append:尾部追加元素
   result = append(result,value)
   result = append(result, i)
  }
  m[k] = i
 }
 return result
}

  地址:https://mp.weixin.qq.com/s/sTicB9IgCZxVhe53j7nsCA