问题描述
您可以在Leetcode上找到问题。
给出了一个整数nums
和一个整数target
,返回两个数字的索引,以便它们加起来为target
。您可以假设每个输入都具有一个解决方案,并且您可能不会使用两次相同的元素。您可以按任何顺序返回答案。
示例1:
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: The sum of 2 and 7 is 9. Therefore, the indices of the two numbers are 0 and 1.
示例2:
Input: nums = [3,2,4], target = 6
Output: [1,2]
示例3:
Input: nums = [3,3], target = 6
Output: [0,1]
了解问题
我们有一个整数和目标值。我们的任务是在数组中找到两个数字,将其加起来为目标值。我们需要返回这两个数字的索引。
执行
让我们在GO中实现解决方案。
package main
func twoSum(nums []int, target int) []int {
complements := make(map[int]int)
for i, num := range nums {
complement := target - num
if index, found := complements[complement]; found {
return []int{index, i}
}
complements[num] = i
}
return nil
}
测试
要测试解决方案,我们可以在GO中使用testing
软件包。我们将编写多个测试案例,以确保我们的实施能够按预期进行。
package main
import (
"reflect"
"testing"
)
func TestTwoSum(t *testing.T) {
tests := []struct {
nums []int
target int
want []int
}{
{[]int{2, 7, 11, 15}, 9, []int{0, 1}},
{[]int{3, 2, 4}, 6, []int{1, 2}},
{[]int{3, 3}, 6, []int{0, 1}},
}
for _, test := range tests {
got := twoSum(test.nums, test.target)
if !reflect.DeepEqual(got, test.want) {
t.Errorf("Input: nums=%v, target=%d\nGot: %v\nWant: %v", test.nums, test.target, got, test.want)
}
}
}
结论
恭喜!您已经成功解决了LeetCode上的两个总问题。通过解决此问题,您已经学会了如何在数组中找到两个数字,这些数字加起来是特定的目标值。这个问题是使用地图(或字典)存储补充并执行高效查找的经典示例。
既然您已经熟悉解决此问题了,那么您可以继续面对leetcode的下一个挑战,并继续提高解决问题的技能。祝你好运!