快速寻找满足条件的两个数(编程之美)
2013-08-19 00:23
344 查看
快速找出一个数组中的两个数,让此两个数之和等于一个给定的数。
如:5 6 1 4 7 9 8 中找出两个数之和等于10的数
编程之美之美P177有详细解答过程,思路是先排序(O(nlog(n)),然后保存两个指针beg、end,初始指向头部和尾部,如过*beg+*end==sum,则返回;如果*beg+*end>sum则向前移动end;*beg+*end<sum,则向后移动beg。
扩展问题:
1、快速找出一个数组中的3个数,让此两个数之和等于一个给定的数。如5 6 1 4 7 9 8 中找出3个数之和等于14的数
思路:
我们借鉴两个数之和等于指定值的思路。
首先,排序。数组变成 1 5 6 7 8 9;
其次,我们用一个指针p从后往前扫描,直到*p*3<sum或者p的前面的元素<3个为止。
确定p指针后,再p指向前面的数组范围中寻找两个数之和等于sum-*p的两个数。可以用前面的算法。
如p指向9的时候,我们在p指向前面的数组范围中寻找两个数之和等于5,未找到;p指向8,在8前面的数组范围中寻找两个数之和等于4,为找到;p指向7,在7前面的数组中找两个数之和等于7,我们找到6、1;p指向6,在6前面的数组中找两个数之和等于8,未找到;p指向5,....
先写到这里,下面的问题,下次补充
2、快速找出一个数组中的4个数,让此4个数之和等于一个给定的数。如5 6 1 4 7 9 8 中找出4个数之和等于19的数
3、如何找出一个数组中的4个数,让其中3个数之和等于另一个数。如5 6 1 3 7 9 8 中找出4个数,让其中3个数之和等于另一个数
如:5 6 1 4 7 9 8 中找出两个数之和等于10的数
编程之美之美P177有详细解答过程,思路是先排序(O(nlog(n)),然后保存两个指针beg、end,初始指向头部和尾部,如过*beg+*end==sum,则返回;如果*beg+*end>sum则向前移动end;*beg+*end<sum,则向后移动beg。
扩展问题:
1、快速找出一个数组中的3个数,让此两个数之和等于一个给定的数。如5 6 1 4 7 9 8 中找出3个数之和等于14的数
思路:
我们借鉴两个数之和等于指定值的思路。
首先,排序。数组变成 1 5 6 7 8 9;
其次,我们用一个指针p从后往前扫描,直到*p*3<sum或者p的前面的元素<3个为止。
确定p指针后,再p指向前面的数组范围中寻找两个数之和等于sum-*p的两个数。可以用前面的算法。
如p指向9的时候,我们在p指向前面的数组范围中寻找两个数之和等于5,未找到;p指向8,在8前面的数组范围中寻找两个数之和等于4,为找到;p指向7,在7前面的数组中找两个数之和等于7,我们找到6、1;p指向6,在6前面的数组中找两个数之和等于8,未找到;p指向5,....
先写到这里,下面的问题,下次补充
2、快速找出一个数组中的4个数,让此4个数之和等于一个给定的数。如5 6 1 4 7 9 8 中找出4个数之和等于19的数
3、如何找出一个数组中的4个数,让其中3个数之和等于另一个数。如5 6 1 3 7 9 8 中找出4个数,让其中3个数之和等于另一个数
相关文章推荐
- 编程之美2.12—快速寻找满足条件的两个数
- 编程之美2.12 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数(编程之美2.12)
- 编程之美-快速寻找满足条件的两个数方法整理
- 编程之美2.12快速寻找满足条件的两个数及扩展问题Java版
- 编程之美2.12——快速寻找满足条件的两个数或三个数
- 编程之美2.12——快速寻找满足条件的两个数
- 编程之美2.12——快速寻找满足条件的两个数或三个数
- 《编程之美》2.12 快速寻找满足条件的两个数(预排序)
- 编程之美2.12 快速寻找满足条件的两个数
- 编程之美——快速寻找满足条件的两个数或三个数
- 编程之美2.12——快速寻找满足条件的两个数或三个数
- 编程之美2.12--快速寻找满足条件的两个数
- 《编程之美》学习笔记——2.12快速寻找满足条件的两个数
- [编程之美2.12]快速寻找满足条件的两个数及leetcode的3 sum closest 和 4 sum解析
- 编程之美--快速寻找满足条件的两个数
- 快速寻找满足条件的两个数
- 程序员面试100题之十:快速寻找满足条件的两个数
- 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数