leetcode——两数之和
Posted 点点寒彬
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode——两数之和相关的知识,希望对你有一定的参考价值。
问题
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
思路过程
第一次接触LeetCode
,感觉这题真的是非常简单。两次遍历这个数组,求和就可以解决这个问题了。
class Solution(object):
def twoSum(self, nums, target):
for i, x in enumerate(nums):
for j, y in enumerate(nums):
if i == j:
pass
else:
if x+y == target:
return i, j
提交后发现,解答超时了,这时候,才开始真正的去思考,应该如何提升效率。
上面的代码很明显,每次都额外判断了i==j
,把这个判定稍微修改一下。
class Solution(object):
def twoSum(self, nums, target):
for i, x in enumerate(nums):
for j, y in enumerate(nums):
if x+y == target:
if i != j:
return i, j
这样简单修改了一下,发现提交通过了,解题时间花了4000+ms
,似乎还有更大的提升空间。
遍历hash表
的效率是比遍历数组
的效率高的,因此我们可以把第二次遍历数组
改为hash表
。
class Solution(object):
def twoSum(self, nums, target):
dicts =
for i, x in enumerate(nums):
dicts[x] = i
for i, x in enumerate(nums):
if (target-x) in dicts:
if i != dicts[(target-x)]:
return i, dicts[target-x]
以上,代码结构和思路没有变化,只是把数组
替换成hash表
,但是解题时间从4000+ms
缩短为58ms
结语
第一次接触LeetCode
,突然发现这些题目做完之后,可以优化我们平时写代码的习惯。
以上是关于leetcode——两数之和的主要内容,如果未能解决你的问题,请参考以下文章
leetcode 两数之和 II - 输入有序数组 题解分析