Leetcode 1. Two Sum
@(LeetCode题目分析)
基于Python3
题目描述
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]
"""
# 18/19 cases passed, not the most complicated one
# num = len(nums)
# for i in range(num):
# for j in range(i+1,num):
# if nums[i] + nums[j] == target :
# return [i,j]
map = {}
for i in range(len(nums)):
if map.__contains__(target - nums[i]): # 将值定为key,可以使用此函数快速检验是否包含,python2是用has_key
return [map[target - nums[i]],i]
map[nums[i]] = i
第一种写法是双重for
循环遍历,有一个数组很大的样例时间复杂度上无法通过。
主要分析第二种写法,简单且快速,利用的是Python内建的字典数据结构:
首先建立一个空的字典。
思想是在遍历时填充这个字典。
判断是否包含target - nums[i]
这个键时,假定的是nums[i]
是一个key,这样如果条件满足,就直接得到结果。且这个写法下,不存在用两个相同下标的元素作为加数的情况,因为检查的是target - nums[i]
,而每次加入的键值对是nums[i],i
。