如同for迴圈增量在不同的位置影響迴圈體邊控,雜湊讀寫亦如是
給出一個整數陣列,請在陣列中找出兩個加起來等於目標值的數,
你給出的函式twoSum 需要返回這兩個數字的下標(index1,index2),需要滿足 index1 小於index2.。
注意:下標是從1開始的 假設給出的陣列中只存在唯一解
例如:
給出的陣列為 {20, 70, 110, 150},目標值為90
輸出 index1=1, index2=2
分析
- 暴力破解雙層迴圈
- 確保使用的雜湊,在查詢之後收錄當前索引位
雜湊實現
一次迴圈解決雜湊讀寫,遞增索引查詢
func twoSum( numbers []int , target int ) []int {
m := make(map[int]int,0)
for i,v := range numbers {
if idx, ok := m[target-v];ok{
return []int{idx,i+1}
}
m[v]=i+1
}
return nil
}
暴力破解
func twoSum( numbers []int , target int ) []int {
for i:=0;i<len(numbers);i++ {
for j:=i+1;j<len(numbers);j++{
if numbers[i] + numbers[j] == target {
return []int{i+1,j+1}
}
}
}
return nil
}
數對和
找出陣列中兩數之和為指定值的所有整數對。一個數只能屬於一個數對
輸入: nums = [5,6,5], target = 11
輸出: [[5,6]]
雜湊查詢成功,當前迴圈變數數不入雜湊,對應雜湊計數減記
func pairSums(nums []int, target int) [][]int {
rs := [][]int{}
m := make(map[int]int, 0)
for _,v := range nums{
if cnt,ok := m[target-v];ok && cnt > 0{
rs = append(rs, []int{target-v, v})
m[target-v]--
}else{
m[v]++
}
}
return rs
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結