01.leetcode题目讲解(Python):两数之和

题目:

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

这道题目比较容易想到的是通过暴力搜索求解,但暴力搜索的时间复杂度为 O(n^2)。如果使用哈希的思想,利用Python中list的查询方式,我们可以将复杂度降低到 O(n)。有两个值得注意的地方:

  1. 同样的元素不能重复使用(也就是不能自己加自己)
  2. 给定的数组中可能有相同的元素(比如 [3, 3, 4, 4, 5])

参考代码如下:

class Solution:
    def twoSum(self, nums, target):
        i = 0
        while i < len(nums):
            if i == len(nums) - 1:
                return "No solution here!"
            r = target - nums[i]
            # Can't use a num twice
            num_follow = nums[i + 1:]
            if r in num_follow:
                return [i, num_follow.index(r) + i + 1]
            i = i + 1

ps:如果您有好的建议,欢迎交流 :-D,
也欢迎访问我的个人博客 苔原带 (www.tundrazone.com)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,348评论 0 33
  • 15.三数之和 给定一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c ,使得a + b +...
    不爱去冒险的少年y阅读 2,656评论 0 0
  • 326. Power of Three Given an integer, write a function to...
    跑者小越阅读 6,438评论 0 1
  • 每次熟练地摸出钥匙,听到锁孔里啪嗒转动的声音时,端了一整天的身板,一下子就好像得到了放松,白天的劳累就此烟消云散了...
    简之阅读 4,039评论 8 22
  • 5月6日精进:今天上午整理了一下客户资料,开始打回访电话。没打之前心里挺忐忑的,总担心遇到问题。打了几个发现客户对...
    京心达毕玉娜阅读 669评论 0 0