首页 > 其他 > 详细

编程题目日志130111:数组内寻找三个数的和

时间:2014-07-22 23:07:23      阅读:360      评论:0      收藏:0      [点我收藏+]

题目:

  (18题)输入一个数组,和一个数k,在屏幕上打印数组内所有和为k的三个数的组合

 

思路:

  这题我出的,想多了。纯属想多了。我都想到做哈希表把所有两个数的结果排列进去的方法来实现n2级的查找,然后发现其实只要首尾两个指针就可以了……

 

方案:

  对数组依次遍历,针对每个当前数array[i],寻找在它前面的数组中和为k-array[i]的组合。保证了数字的排位次序,也就能保证不会重复输出同一组合

 

代码:

bubuko.com,布布扣
 1 void FindThreeNumbers(int *array,int len,int k)
 2 {
 3 //思路:从第三个数遍历到结尾,对每个数array[i],寻找它前面的序列内是否有一个两个数的组合和为k-array[i] 
 4     int i;
 5     int begin,end;
 6     for(i=2;i<=len-1;++i)
 7     {
 8         begin=0;
 9         end=i-1;
10         while(begin<end)
11         {
12 
13             if(array[begin]+array[end]<k-array[i])
14                 ++begin;
15             else if(array[begin]+array[end]>k-array[i])
16                 --end;
17             else
18             {
19                 printf("Find: %d %d %d\n",array[begin],array[end],array[i]);
20                 ++begin;
21                 --end;
22             }
23         }
24     }
25 }
bubuko.com,布布扣

 

  

编程题目日志130111:数组内寻找三个数的和

原文:http://www.cnblogs.com/keepcalmandcarryon/p/3515056.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!