Leetcode刷刷刷 - 1. Two Sum

Leetcode是程序员刷算法题的大本营,难度也很友好的分了高级、中级及初级,目前在全球范围内已经有了上百万名用户,并且拥有超过了1000道题目资源和公司面试真题。
我在刷题的过程中,会复习曾经学过的数据结构知识来解决题目,然后在看别人优秀的解决方案时,还是学习到新的思路,以及一些tricks,觉得记录一下会很有意思。这系列主要会翻译题目,然后使用python来解题,并且会穿插一些python的用法技巧,希望大家可以一起加油~

目前答题是“pick one”,顺序随机,这次先从最简单的走起。

Two Sum

Q:Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the sameelement twice.

两数之和
给一个整数数组nums和一个目标值target,请你在该数组中找到和为目标值的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,但是你不能重复利用这个数组中同样的元素。

Example:
Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

解题思路:
这个题最暴力的解法当然是两个for循环遍历数组,这样计算复杂度为O(n²)
比较巧妙的解法是引入python dict,而在python中字典是基于hash table(哈希表,也叫散列表)做的,所以我们这次介绍下哈希表。

哈希函数大概就是value = hash(key),我们希望key和value之间是唯一的映射关系。哈希表是根据关键码值(key value)而直接进行访问的数据结构,通过把关键码值映射到表中的一个位置来访问记录,以加快查找的记录。
哈希表的查找时间为常数,即O(n)。

下面就是用字典解题的代码了,善用数据结构,可以让我们的思路更加开阔,程序性能也会提升。

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        
        d = dict()
        for index, value in enumerate(nums):
            if target - value in d:
                return [d[target-value], index]
            else:
                d[value] = index
        return None
    原文作者:V怪兽
    原文地址: https://www.jianshu.com/p/d78f1d74222e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞