題目描述為給定一個數組 (nums) ,跟一個目標數 (target),要在數組內找出兩數 a,b 滿足 a+b=target,並返回 a,b 在數組中的 index。
題目還有補充說明,此題我們可以多做一個假設: 總是可以找到唯一解,以及禁止使用數組中同一個元素兩次 。有了此假設我們就不必考慮無解的情形。
把任取兩數相加的所有可能都進行嘗試,看是否為目標數 (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{-1,-1}
}
此題我們可以建立一組映射關係 (map) 來對應數字 v 與 index。從頭開始按順序查找,當搜索到數字 v 時,便去查找 map 中有沒有 (target-v),若有則滿足題目要求,可以返回此兩數的 index 。若沒有,則把 v 及其對應的 index 存到 map 中,繼續往後查找。
參考程式碼:
func twoSum(nums []int, target int) []int {
m:=make(map[int]int)
for i,v:=range nums{
j,exist := m[target-v]
if exist{
return []int{i,j}
}
m[v]=i
}
return []int{-1,-1}
}
解法 1 與 2 各有優劣,我們一般會採用時間複雜度較低的解法。
附上簡單的測試,程式碼 在此。
若能夠有完整可執行的程式碼,另外再加上測試的部分,測試含有benchmark,
是不是會更好?
你好,已在文章最後補上程式碼連結。
這樣蠻好的喔.