Easy 1 – 两数之和
题目描述:
给定一个整数数组 nums 和一个整数目标值 target,请在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
我的想法:两个for循环
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
list_len = len(nums)
for i in range(list_len):
for j in range(i+1, list_len):
if nums[i] + nums[j] == target:
return [i, j]
return []
最简单、最费时的解法,已经是我的猪脑极限。
看答案才知道的解法:哈希表。
首先,什么是哈希表呢?(学数据结构已经是六年前,真的有点模糊了。
哈希表:根据Key-Value进行访问的一种数据结构(这不就是python里面的dic?)
怎么hash呢?这个就要说到哈希函数(散列函数),在这个题目里,哈希函数其实就是 target-n ,如果没有,就把这个值作为key存进哈希表里,value就是当前的序号,后面如果发现tageet-n在哈希表中,直接返回序号即可。
虽然是本科生都会学到的东西,但是隔了几年再看本文科生真的大受震撼,原来我就是真正的乐色!
# 比葫芦画瓢写出来的,以后再遇到可能还是不会用系列。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hash_table = {}
for i, n in enumerate(nums):
if target-n in hash_table:
return [hash_table[target - n], i]
else:
hash_table[nums[i]] = i
return []
Leave a Reply