From b916d0d874e3297b8fe7d798871de217a4229241 Mon Sep 17 00:00:00 2001 From: VicRen Date: Thu, 5 Nov 2020 14:27:32 +0800 Subject: [PATCH] 20201105: find target --- 20201105_find_target/main.go | 56 +++++++++++++++++++++++++++++++ 20201105_find_target/main_test.go | 56 +++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 20201105_find_target/main.go create mode 100644 20201105_find_target/main_test.go diff --git a/20201105_find_target/main.go b/20201105_find_target/main.go new file mode 100644 index 0000000..32a3439 --- /dev/null +++ b/20201105_find_target/main.go @@ -0,0 +1,56 @@ +package main + +import "fmt" + +var nums = []int{1, 2, 7, 9, 13, 57, 36, 26, 55, 11, 6, 3, 89, 36, 75, 36, 76, 95, 98, 101, 320, 520, 85, 36, 62, 49, 96, 1} + +func main() { + fmt.Println("num=", findTargetInNums(35, nums)) + fmt.Println(findTargetInNums2(35, nums)) +} + +func findTargetInNums(target int, nums []int) []int { + for x, i := range nums { + if i >= target { + continue + } + for y, j := range nums { + if i == j { + continue + } + if i+j == target { + return []int{x, y} + } + } + } + return nil +} + +func findTargetInNums2(target int, nums []int) []ret { + var r []ret + for x, i := range nums { + if i >= target { + continue + } + for y, j := range nums { + if i == j { + continue + } + if i+j == target { + r = append(r, ret{i, x}) + r = append(r, ret{j, y}) + return r + } + } + } + return r +} + +type ret struct { + num int + subscript int +} + +func (r ret) String() string { + return fmt.Sprintf("num=%d-sub=%d", r.num, r.subscript) +} diff --git a/20201105_find_target/main_test.go b/20201105_find_target/main_test.go new file mode 100644 index 0000000..7387861 --- /dev/null +++ b/20201105_find_target/main_test.go @@ -0,0 +1,56 @@ +package main + +import ( + "reflect" + "testing" +) + +func Test_findTargetInNums(t *testing.T) { + type args struct { + target int + nums []int + } + tests := []struct { + name string + args args + want []int + }{ + { + "3_in_1_2", + args{3, []int{1, 2}}, + []int{0, 1}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := findTargetInNums(tt.args.target, tt.args.nums); !reflect.DeepEqual(got, tt.want) { + t.Errorf("findTargetInNums() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_findTargetInNums2(t *testing.T) { + type args struct { + target int + nums []int + } + tests := []struct { + name string + args args + want []ret + }{ + { + "3_in_1_2", + args{3, []int{1, 2}}, + []ret{{1, 0}, {2, 1}}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := findTargetInNums2(tt.args.target, tt.args.nums); !reflect.DeepEqual(got, tt.want) { + t.Errorf("findTargetInNums2() = %v, want %v", got, tt.want) + } + }) + } +}