LeetCode(1) TWO SUM

xbdyhh · · 328 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

 

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

方法一:

func twoSum(nums []int, target int) []int {
    hashTable := map[int]int{}
    for i, x := range nums {
        if p, ok := hashTable[target-x]; ok {
            return []int{p, i}
        }
        hashTable[x] = i
    }
    return nil
}

方法二:

func twoSum(nums []int, target int) []int {
    for i, x := range nums {
        for j := i + 1; j < len(nums); j++ {
            if x+nums[j] == target {
                return []int{i, j}
            }
        }
    }
    return nil
}

方法三:

func twoSum(nums []int, target int) []int {
   for(var i int;i=0;i++){
       var j int = nums[i]-target
       for(var k int;k=i;k++){
           if(nums[k]==j) return []int{i,k}
       } 
   } 
   return nil
}

image.png
自上而下内存消耗如图

方法一:

官方推荐的键值对算法,通过运用哈希表组成键值map,实现快速查找,速度最快,但是会有额外的内存消耗。

方法二:

暴力破解法,两层循环嵌套,对每两个数字都进行相加组合,与目标数字比对,速度最慢。

方法三:

使用数组,但是会对目标函数需要查询的值进行一个记录,算是对方法二的一个小优化,内存消耗不变,速度有所提升。(这个不属于官方的解法,自己想的一个小优化,还希望各位可以提供更多想法)。


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:xbdyhh

查看原文:LeetCode(1) TWO SUM

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

328 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传