🦁

【Go で解くleetcode】1. Two Sum

2022/07/09に公開

前置き

https://twitter.com/cava_miku/status/1530501895311175680

問い

加算して target となる組み合わせのindex1,index2を返す問題です
https://leetcode.com/problems/two-sum/

考え方

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

ログインするとコメントできます