Leetcode 0001 Two Sum

题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。你可以按任意顺序返回答案。

此题主要有两种解法,一种是暴力求解,另一种是用哈希表(Hash Table )。

(一) 暴力求解法


Figure 1-1

此方法没什么特别的。思路就是,先list最开始往后遍历,假设list长度为n,遍历到第i个元素,那只要看剩下的n-i个元素有没有满足和第i个元素相加为target的(不需要再和之前的n-1个元素匹配)。

时间复杂度为,因为有两层循环,最坏的情况下两两都要匹配。

空间复杂度为,因为只需要存储第i个元素及遍历剩下元素时用于和第i个元素匹配的元素即可。


暴力求解法时间复杂度会高一些,运行起来会比较慢,相对较快的方法是用哈希表。


(二)哈希表法

Figure 1-2



哈希表的时间复杂度为,对于每一个元素 num,我们可以 O(1)地寻找 target - num。

空间复杂度为,主要为哈希表的开销。


几个用到的知识点:

1. triple quotes: Spanning strings over multiple lines can be done using python’s triple quotes. It is also used for long comments in code. Special characters like TABs, verbatim or NEWLINEs can also be used within the triple quotes. 

所以,一定程度上可以把triple quotes当成一种注释方法, 运行以下代码会有如下输出结果:


Figure 1-3


2. enumerate()函数:

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标。网上找的示例:


Figure 1-4

3. {}:

代表dict字典数据类型,字典是Python中唯一内建的映射类型。字典中的值没有特殊的顺序,但都是存储在一个特定的键(key)下。键可以是数字、字符串甚至是元组(tuple)。自己写了个示例:


Figure 1-5

输入dict中某个元素(引号前面的),输出的是相应的引号后面的index(个人理解),这是和array最大的区别,array是输入index,输出index对应的elements。另外两个示例:


Figure 1-6


Figure 1-7

你可能感兴趣的:(Leetcode 0001 Two Sum)