Leetcode 1
题目描述:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
解法一:
'''
蛮力法:两层循环,暴力求解--7560ms
'''
class Solution0:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
result = []
for i in range(len(nums)):
for j in range(i+1,len(nums)):
if nums[i] + nums[j] == target:
result.append(i)
result.append(j)
return result
解法二:
'''
改进1:单层循环--1360ms
'''
class Solution1:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
result = []
for i in range(len(nums)):
second_num = target-nums[i]
if second_num in nums:
j = nums.index(second_num)
if i != j:
result.append(i)
result.append(j)
return result
解法三:
'''
改进2:利用字典--48ms
'''
class Solution2:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
result = []
index_dict = {nums[i]:i for i in range(len(nums))}
for i in range(len(nums)):
temp =target-nums[i]
j = index_dict.get(temp)
if temp in index_dict and i != j :
result.append(i)
result.append(j)
return result
附:
# 发现先定义列表 result
result = []
# 然后append 之后再返回的效率比直接返回高 return [i,j]
result.append(i)
result.append(j)
return result