NS - Leetcode Notes

从零开始的Leetcode刷刷乐

看心情用Python3或者散装Java

笔记作者:outx

最后一次更新于2022-02-24

两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例

1
2
输入:nums = [2,7,11,15], target = 9
输出:[0,1]

我的代码

思路:就是一个二重遍历,显然很low

1
2
3
4
5
6
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for pos1 in range(len(nums)):
for pos2 in range(len(nums)):
if (nums[pos1]+nums[pos2] == target) & (pos1 != pos2):
return [pos1, pos2]

优秀代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
hashmap = {}
for index, num in enumerate(nums):
another_num = target - num # 这里是比较好的思路,先找出另一个数字是什么,再从先前存放过的数字的hashmap中去找,这样只用遍历一次即可
if another_num in hashmap:
return [hashmap[another_num], index]
hashmap[num] = index
return None

# enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中