🦁
【Go で解くleetcode】1. Two Sum
前置き
問い
加算して target
となる組み合わせのindex1
,index2
を返す問題です
考え方
target - nums[i]
となる値がスライスに存在しないか、を考慮することで計算量を省略できます
回答
func twoSum(nums []int, target int) []int {
m := make(map[int]int, len(nums))
for i, num := range nums {
index, ok := m[target-num]
if ok {
return []int{index, i}
}
m[num] = i
}
return []int{}
}
テストコード
package main
import (
"reflect"
"testing"
)
func Test_twoSum(t *testing.T) {
type args struct {
nums []int
target int
}
tests := []struct {
name string
args args
want []int
}{
{
name: "test_1",
args: args{
nums: []int{2, 7, 11, 15},
target: 9,
},
want: []int{0, 1},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := twoSum(tt.args.nums, tt.args.target); !reflect.DeepEqual(got, tt.want) {
t.Errorf("twoSum() = %v, want %v", got, tt.want)
}
})
}
}
Discussion