原题是:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
思路是:
这一题,需要返回满足条件的元素的坐标,数组不能排序。
如果降低暴力解法的时间复杂度呢。
想到用哈希来存储遍历时的信息,用空间来换时间。
下面是我自己的代码,最后是一个值得借鉴的别人的代码。
我代码中,需要注意重复元素的问题。
代码:
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
dicts = {}
result = []
for i in range(len(nums)):
if nums[i] not in dicts:
dicts[nums[i]] = [i]
else:
dicts[nums[i]].append(i)
if target - nums[i] in dicts and target - nums[i] != nums[i]:
result.append(dicts[target - nums[i]][0])
result.append(i)
return result
elif target - nums[i] == nums[i]:
if len(dicts[nums[i]]) >1:
return dicts[nums[i]][0:2]
return -1
别人的代码优秀在于:
1.使用enumerate来遍历,可以同时操作Index,和元素的值。
2.逻辑更简单,避免和统一了一些特殊情况。
Screen Shot 2017-11-24 at 12.13.42 AM.png
网友评论