剑指Offer之和为S的两个数字

题目描述

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
 
思路:夹逼(可以保证输出两个数的乘积最小的,举例说明:2 3 4 5 12 13 14 15 输出和为17的两个数,显然2和15的乘积小于其他两个数的乘积)。
 
 1 import java.util.ArrayList;
 2 public class Solution {
 3     public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
 4         ArrayList<Integer> list=new ArrayList<>();
 5         if(array==null || array.length==0)
 6             return list;
 7         int i=0,j=array.length-1;
 8         while(i<j) {
 9             if(array[i]+array[j]==sum) {
10                 list.add(array[i]);
11                 list.add(array[j]);
12                 return list;
13             }
14             else if(array[i]+array[j]>sum)
15                 j--;
16             else
17                 i++;        
18         }
19         return list;  
20     }
21 }

 

posted @ 2020-06-07 10:36  Student-JacobLee  阅读(161)  评论(0编辑  收藏  举报