和为S的两个数字

问题

  输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

 

分析

  设置两个下标low(初始时,指向数组头)和high(初始时,指向数组尾),当array[low]+array[high]<S时,low++;当array[low]+array[high]>S时,high--;当array[low]+array[high]==S时,即可返回(返回的第一对就是乘积最小的!!!

 

代码

 1   public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
 2         ArrayList<Integer> list = new ArrayList<Integer>();
 3         int low = 0, high = array.length-1;
 4         int pro = Integer.MAX_VALUE;
 5         while(low<high){
 6             int temp = array[low]+array[high];
 7             if(temp<sum)
 8                 low++;
 9             else if(temp>sum){
10                 high--;
11             }
12             else{
13                 list.add(array[low]);
14                 list.add(array[high]);
15                 return list;
16             }
17             
18         }
19         
20         return list;
21     }

 

posted on 2017-06-06 15:30  一个不会coding的girl  阅读(160)  评论(0编辑  收藏  举报

导航