美文网首页
两数之和twoSum

两数之和twoSum

作者: 浪汐颜 | 来源:发表于2019-10-09 22:24 被阅读0次

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

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

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


  • 解法一:
    根据targe - nums[i]的值,判断差值是否在nums[]里面。如果在,则需要判断获取的数和nums[i]是否相等。不相等就通过获取该值得索引值,并输出[ i, j ],反之继续循环。
    tip:我们可不可以缩小每次判断差值 in nums[]这个列表的大小,来减少判断的时间呢?(以下列出了优化解法)
def twoSum( nums, target):
        i, j = 0, -1
        for x in nums:
            sub = target - x
            items = nums[i+1:]#通过切片获取更小范围的列表,缩小判断时间
            if sub in items:
                j = items.index(sub)+i+1#我们是从前往后查询的,最后索引值要加上i+1
                break
            i = i + 1
        if j >= 0:
            return[i, j]
        else:
            return[]


  • 解法二:用字典模拟hash表,我们会使用到Python的内置函数enumerate() 返回枚举对象
        hashmap = {}
        e_nums = list(enumerate(nums)) #把枚举对象转换成字典
        for index, value in e_nums:
            hashmap[value] = index #列表的值为key,索引为value
        for i, value in e_nums:
            j = hashmap.get(target - value)
            if (j is not None) and (j != i):
                return [i,j]

  • 解法三:缩小需要查找的字典大小,来减少运行时间
def twoSum(nums, target):
    hashmap={}
    for i,num in enumerate(nums):
        if hashmap.get(target - num) is not None:
            return [i,hashmap.get(target - num)]
        hashmap[num] = i 
        #这句不能放在if语句之前,解决list中有重复值或target-num=num的情况

如果想要把hashmap[ num] = i放在前面,if判断中要添加 i !=hashmap.get(target - num)



done is better than perfect

相关文章

  • [LeetCode] TwoSum两数之和

    [LeetCode] TwoSum两数之和 Given an array of integers, returni...

  • 两数之和(TwoSum)

    大家都说 算法 是程序员的分水岭, 三年 技术一个坎。 我工作2年已经感觉到危机感,正准备同时这面临着两个问题了,...

  • 两数之和twoSum

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

  • 面试常规算法算法

    两数之和 // 方法1:暴力法 var twoSum = function(nums, target){ va...

  • LeetCode TwoSum 两数之和

    题目 Given an array of integers, return indices of the two ...

  • 2. 两数相加(AddTwoNumbers)

    上一篇:1.TwoSum(两数之和) 题目(Medium) You are given two non-empty...

  • 1.TwoSum(两数之和)

    写在coding前 题目(Easy) 给定一个整数数列,找出其中和为特定值的那两个数,并返回这符合条件的数的下标。...

  • 1.两数之和-twoSum

    链接 LeeCode-1-两数之和 参考 知乎 Git 题目描述 给定一个整数数组 nums 和一个目标值 tar...

  • Easy_01

    两数之和 想法一:最直接的暴力解法。通过两层嵌套循环对数组进行遍历。 vector twoSum(vector &...

  • Leetcode TwoSum & 两数之和 解题报告

    Two Sum 给定一个数组nums和一个整数值target,返回两个数值(nums数组下标的index),使其所...

网友评论

      本文标题:两数之和twoSum

      本文链接:https://www.haomeiwen.com/subject/ekxhuctx.html