双指针
经典题目
sum equal pair
题目描述
在一个序列
样例输入
9
21 4 5 6 13 65 32 9 23
37
样例输出
5 32
解析
暴力
STL map
二分查询
可以参考: [[…/…/recursion/binary_search/有序集上的操作.md]]
双指针法
开始证明
对问进行抽象, 先对整个序列进行排序
其中
证明: 集合分解,分治
先用最小值
- 和正好为所求,因为要求是
是序列中最小数,所以这就是答案,直接输出 - 和大于所求,易想到
和最小值的和大于所求,那么 和其它任何值的和都大于所求,所以 不可能是答案,所以可以缩小答案所在区间为: - 和小于所求,易想到
和最大值的和小于所求,那么 和其它任何值的和都小于所求,所以 不可能是答案,所以可以缩小答案所在区间为
也就是说,我们不停的缩小答案所在的区间,因为答案一定存在,最终一定可以得到解.
证毕
总结:在有序集上求和为定值的数,可以用双指针法
代码如下:
练习
- 英文,leetcode 双指针的题目 https://leetcode.com/tag/two-pointers/