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

题目:

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

 

思路:

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

 

方案:

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

 

代码:

编程题目日志130111:数组内寻找三个数的和
 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 }
编程题目日志130111:数组内寻找三个数的和

 

  

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

上一篇:Android开发概述


下一篇:java中如何将字符串数组转换成字符串