LeetCode GO#1。两个总和
#go #leetcode

问题描述

您可以在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的下一个挑战,并继续提高解决问题的技能。祝你好运!