Leetcode | easy | Two Sum

Leetcode 里的 easy题

 

原题:

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

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

return [0, 1].

 

分析:

题意就是给定一个sum,一个数组,然后你需要输出数组中两个相加之后的和等于这个sum的数字的下标

 

思路:

1当然可以来个二重遍历,把所有数字的两两之和都算出来,然后看看那一次求和的时候,那个和等于sum,然后输出当前的i和j。(这就是肤浅的我的思路,但是貌似不允许这样做)

2根据网上搜到的办法,可以建立一个字典,在遍历的时候,先判断自己需要的数字是否在字典里,如果不在的话,就把自己放入字典内,供后者查询。

比如现在给定的数组为[5,6,2,7],sum为9

那么程序执行的顺序就是:

keys={}

5需要的数字4在key里么?——》不在!

将5放入keys中

Key={5}

下一个

6需要的数字3在keys里么?——》不在!

将6放入keys中

Keys={5,6}

2需要的数字7在keys里么?——》不在!

将2放入keys中

Keys={5,6,2}

7需要的数字2在keys里么?——》在!

输出对应的下标!

这样一来,只要循环一次,就一定能找到那两个数字!

 

代码:

class Solution(object):

    def twoSum(self, nums, target):

        """

        :type nums: List[int]

        :type target: int

        :rtype: List[int]

        """

        keys = {}

        for i in xrange(len(nums)):

            if target - nums[i] in keys:

                return [keys[target - nums[i]], i]

            if nums[i] not in keys:

                keys[nums[i]] = i

参考:Two Sum

欢迎关注“pyhon修炼之道”,我们将持续更新新鲜python文章~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值