写在前边:
本人编程小白自此开启leetcode刷题之旅,计划每日一题。
第一遍会尝试自己动手写,同时输出博客,第二刷的时候会按照博客里的后续优化继续输出代码。任何问题请大家批评指正。
时间:2020-5-09
题目地址:力扣
题目难度:Easy
题目描述:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
思路1:暴力破解
代码段1:通过
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
result = []
for i in nums:
temp = nums.index(i) + 1
for j in nums[temp:]:
if i + j == target:
r1 = nums.index(i)
r2 = nums[temp:].index(j) + 1 + r1
result.append(r1)
result.append(r2)
return result
结果:通过
总结:第一次用leetcode刷题,不太熟悉套路,应当对自己的代码输出多找几个测试case
思路2:使用set
代码段2:通过
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(0, len(nums)):
set1 = nums[i+1:]
_temp = target - nums[i]
if(_temp in set1):
return([i, nums[i+1:].index(_temp) + i + 1])
总结:
- 查找的时候使用set去重,并且是在是从i之后加入set,防止重复使用同一个数
思路3:使用哈希表dict
代码段3:通过
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
dict1 = {}
for i, element in enumerate(nums):
dict1[element] = i
for j, element in enumerate(nums):
temp = dict1.get(target - element)
if temp != j and temp is not None:
return [j, temp]
总结:
- enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。enumerate(sequence, [start=0]) sequence -- 一个序列、迭代器或其他支持迭代对象。start -- 下标起始位置。
思路4:使用哈希表dict,但是在element之前找,省去了循环、重复和target-num=num的判断
代码段4:通过
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
dict1 = {}
for i, element in enumerate(nums):
if dict1.get(target - element) is not None:
return [dict1.get(target - element), i]
dict1[element] = i
总结:
- 哈希表真香
LeetCode刷题之Two Sum
本文记录了作者作为编程新手在LeetCode上解决Two Sum问题的过程,分享了四种不同的解题思路及代码实现,包括暴力破解、使用set、哈希表dict以及优化后的哈希表方法。
8409

被折叠的 条评论
为什么被折叠?



