1. 2数之和
无序数组,找和为target的2个数字,返回下标。
解法:hash表记录之前遇到的数字,表中不存在互补的则继续向后找。
2. 2数之和-有序数组
有序数组,找和为target的2个数字。
解法:头尾双指针
3. 在BST上的2数之和
数据用BST形式储存。
解法1:BST中序遍历输出为有序数组,做法转为2。
解法2:hash表记录已遍历内容,做法类似1。
解法3:BST上的递归,看作从中间向两端的双指针。
4. 2数之和小于target
找出和小于target的2个数中的最大一对。
解法:排序后双指针
5. 2数之和的数据结构
构造一个class实现:插入新数字,查询是否存在和为k的一对数。
解法1:hash表存储数据,查找方式类似1。
解法2:维护有序数组,查找方式类似2。
6. 3数之和为0
有重复的有序数组,取3个数之和为0。
解法:固定一个数,另外2个数用2的双指针查找。期间有剪枝的方法。
7. 最接近的3数之和
找出最接近目标值的3数之和。
解法:固定一个数,另外两个数双指针查找,类似6。
8. 4数之和
找出和为target的4个数组合。
解法:排序,类似3数之和的做法,固定2个数,找2个数。注意处理重复元素。
9. 和为target的子数组
数组中找出和为target的子序列数量,数组乱序,有正负。
解法:前缀和,若sum-前缀和=target,那么说明当前位置到前缀末尾之间,是所求子数组。