题目大意

在数组中找到 2 个数之和等于给定值的数字,结果返回 2 个数字在数组中的下标。

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1]

解题思路

这道题最优的做法时间复杂度是 O(n)。

顺序扫描数组,对每一个元素,在 map 中找能组合给定值的另一半数字,如果找到了,直接返回 2 个数字的下标即可。如果找不到,就把这个数字存入 map 中,等待扫到“另一半”数字的时候,再取出来返回结果。

代码实现

func twoSum(nums []int, target int) []int {
    //创建一个map
    m := make(map[int]int)
    //计算切片长度长度
    lennums := len(nums)
    //循环遍历切片
    for i := 0; i < lennums; i++ {
        //通过传入的给定值-切片对应的位的值得到一个值
        //7=9-2
        another := target - nums[i]
        //如果传入参数小于数组内的值
        if another<0{
            continue
        }
        //判断mac当中是否存在对应的数据
        //if _,ok  :=m[7]
        if _, ok := m[another]; ok {
            //如果存在就返回对应的下标
            return []int{m[another], i}
        }
        //不存在就存入  
        //map[2]:0
        //map[7]:1
        //map[11]:2
        //map[15]:3
        m[nums[i]] = i
    }
    return nil
}

本文转自https://books.halfrost.com/leetcode/ChapterFour/0001~0099/0001.Two-Sum/

最后修改:2021 年 06 月 29 日 10 : 44 AM
如果觉得我的文章对你有用,请随意赞赏