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