题目来源
力扣链接:1. 两数之和 - 力扣(LeetCode) (leetcode-cn.com)
题目描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例
输入:nums = [3,3], target = 6 输出:[0,1]
解题思路
第一种:暴力解法,时间复杂度为o(n^2)。
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for i in range(0, len(nums)):
temp = target - nums[i]
for j in range(i+1, len(nums)):
if temp == nums[j]:
return [i, j]
第二种:参考了大家的解法,优化了第一种解法,时间减少了一半。
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for i in range(1, len(nums)):
temp = nums[:i]
t = target - nums[i]
if t in temp:
j = temp.index(t)
return [i, j]
第三种: 哈希查找,这里最后一行的赋值是为了解决相同取值取同一个下标的问题,所以不能放在循环开始。
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
hashmap = {}
for i, num in enumerate(nums):
j = hashmap.get(target - nums[i])
if j is not None:
return [j, i]
hashmap[num] = i