数组/哈希-简单-两数之和

题目来源:leetcode 1. 两数之和

很简单的一道题,哈希思想不熟练的,第一反应可能是两重循环遍历,时间复杂度O(n^2)。

但是,更好的解法其实是

  1. 构建一个数组map,key是nums中的值

  2. 遍历nums数组,每次用target-num

  3. map[target-num]存在,则直接返回两个数即可

时间复杂度O(n),最坏情况下也只是把整个数组遍历一遍

题目不难,但是考验哈希的应用小技巧

func twoSum(nums []int, target int) []int {
    var result []int;
    // create map
    numMap := make(map[int]int)
    for key, num := range nums {
        numMap[num] = key
    }

    other := 0
    for key, num := range nums {
        other = target - num
        // key != otherKey : Duplicate removal
        if otherKey, ok := numMap[other]; ok && key != otherKey {
            result = []int{key, otherKey}
            return result
        }
    }

    return result

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值