目录
前言
本文通过介绍和为 S 的两数之和,以及三数之和,对双指针算法进行深一步的了解。
和为 s 的两数之和
题目解析


该题目的要求是找到两个数,这两个数相加的和是等于 target 的。题中也有个很重要的条件,按照升序记录于数组中,这个升序是十分关键的。
我们直接探讨暴力解法,即将所有的两数之和举例出来,第一次相等就返回即可。如果运气差点,就需要遍历完整个数组两次,即两个 for 循环,此时的时间复杂度为 O(N^2),这是暴力解法,是比较容易想出来的:
for (int i = 0; i < price.size(); i++) {
for (int j = 0; j < price.size(); j++) {
// 判断是否满足条件
}
}
当然了,如果使用暴力解法,那么我们对题目的升序就没有任何使用了,就很吃亏,所以现在进入算法原理。
算法原理
使用双指针算法,对于题目中的升序,一定要利用好。我们知道:
target = num1 + num2
那么既然是升序的,如果我们让两个指针,一个从开始走,一个从末尾走,也就是最大的和最小的走,判断结果,大于了 target,右指针往左边走,反之亦然,这时候其实已经做完题目了。
对于循环来说,只有一个循环,如果没有找到,返回的是个空就可以。
算法编写
{
:
{
right = price.() - , left = ;
(left < right) {
(price[left] + price[right] == target) {price[left], price[right]};
(price[left] + price[right] < target) left++;
(price[left] + price[right] > target) right--;
}
{};
}
};





