双指针技巧之-多数之和
首先说明一点,这里的所要讲的双指针默认为头尾指针,那么数组一定要是有序的
167、两数之和-输入有序数组
https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/
- 我们初始化头尾指针,如果两数之和<target,让左指针往后移,如果两数之和>target,让右指针往后移.
- 能够这样操作的前提是一个有序数组,这样才能保证,当左指针往后移时,两数之和会变大。同理当右指针往左移时,两数之和会变小.
1 | class Solution { |
15、三数之和 https://leetcode-cn.com/problems/3sum/
- 由于这里题目需要找出不重复的三数之和,在之前全排列2中我们介绍过一种去重的方法。
- 首先我们要将数组排序,这样让两个相等的数在一起,这样更能方便我们使用双指针技巧.
- 与之前的两数之和想法类似,不过为了先制造三个数字,我们需要在外层套用一个循环
1 | class Solution { |
16、最接近的三数之和 https://leetcode-cn.com/problems/3sum-closest/
- 与第15题三数之和类似,不过这里表达的意思是最接近的三数之和
- 还是跟上述一样利用双指针的思想
1 | class Solution { |
18、四数之和 https://leetcode-cn.com/problems/4sum/
- 有了前面做三数之和的经验,现在做四数之和,与之前的思路类似。
- 不过为了利用双指针,我们在外层套用两个循环
- 同样,本题还可以加入剪枝的思想,提前作出判断
1 | class Solution { |
总结
通过上述从两数之和->三数之和->四数之和的变体,我相信你对这种给定排序数组,查询某个值的方法已经有了跟更加深刻的印象!