4-4 使用查找表的经典问题 Two Sum(4题)
[TOC]
例题1:LeetCode 第 1 题
题目要求:两数之和。给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
![image-20191123212444594](/Users/liwei/Library/Application Support/typora-user-images/image-20191123212444594.png)
题目难度:简单。
中文网址:https://leetcode-cn.com/problems/two-sum/description/
英文网址:
求解思路:这道题说实话我是看了解答的,但是一但了解了思路,就很难忘记了。不过虽然很简单,还是拿具体例子说明一下。
我们在遍历数组元素的时候,在放入一个“集合”(抽象意义上的集合,也可以是字典)之前,我们先检查,是不是已经放入了 (target - 当前遍历的那个元素),如果包含了,就说明我们找到了这两个数。
以 [2, 7, 11 ,15 ],为例,首先 2 进入“集合”,然后是 7 ,检查 (target - 7 = 9 -7 =)2,在“集合”中,则说明我们找到了数组中的两个数之和为 target ,怎么样,是不是超级简单。因为这道题要返回的是数组的索引,因此我们放入“集合”对象的时候应该带上一个数据,那么这个“集合”选用“字典”(Map) 是再合适不过的了。
我的解答:
![image-20191123212514595](/Users/liwei/Library/Application Support/typora-user-images/image-20191123212514595.png)
参考资料:
![image-20191123212541064](/Users/liwei/Library/Application Support/typora-user-images/image-20191123212541064.png)
最佳的思路:
![image-20191123212559397](/Users/liwei/Library/Application Support/typora-user-images/image-20191123212559397.png)
练习1:LeetCode 第 15 题 3Sum
中文网址:https://leetcode-cn.com/problems/3sum/description/
题目要求:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。
题目难度:中等。
![image-20191123212636924](/Users/liwei/Library/Application Support/typora-user-images/image-20191123212636924.png)
练习2:LeetCode 第 18 题 4Sum
题目要求:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。
题目难度:中等。
中文网址:https://leetcode-cn.com/problems/4sum/description/
练习3:LeetCode 第 16 题 3Sum Closest
![image-20191123212723345](/Users/liwei/Library/Application Support/typora-user-images/image-20191123212723345.png)