go语法基础:leetcode1

第一题的任务是实现一个两数之和的查找;
最基本的思路是首先初始化一个空的切片数组作为答案
然后依次遍历每个数,当它之后的某个数和它的和是target时就返回他们的下标。

func twoSum(nums []int, target int) []int {
    res:=[]int{}
    i:=0
    for i<len(nums)-1{
        j:=i+1
        for j<len(nums) {
            if nums[i]+nums[j]==target{
                res=append(res,i,j)
            }
            j++
        }
        i++
    }
    return res
}

题目也暗示了存在优于O(n^2)的解法,考虑到这里面几乎每个数都被比较了n次,完全可以先把下标和值取出来
即 如果我找到了val,那么去map查是否有target-val存在。存在就说明结果找到了
没存在就说明我找到了一个新的值,把这个值的下标和数加入map
这里需要注意go的一个特殊语法点:
;用来分割if里面两个连续的执行(由于go里通常用换行代表,其实很少看到;)

dex,ok:=m[target-val];
if ok{
}

和下文中对应的部分,是完全等价的

func twoSum(nums []int, target int) []int {
    res:=[]int{}
    m:=make(map[int]int)
    for index,val:=range nums{
        if dex,ok:=m[target-val];ok {
            return []int{index,dex}
        }else{
            m[val]=index;
        }
    }
    return res
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容