42和为S的两个数字

题目描述

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

输出描述:

对应每个测试案例,输出两个数,小的先输出。



设置2个指针分别指向有序数组的左右2头(最小值,最大值),移动2个指针向中间夹逼

 1 import java.util.ArrayList;
 2 public class Solution {
 3     public ArrayList<Integer> FindNumbersWithSum(int [] a,int sum) {
 4         ArrayList<Integer> res = new ArrayList<Integer>();
 5         if(a.length<2) return res;
 6         
 7         int i =0,j = a.length-1;
 8         while(i<j){
 9             if(a[i]+a[j]==sum){
10                 res.add(a[i]);
11                 res.add(a[j]);
12                 return res;
13             }
14             else if(a[i]+a[j]<sum)
15                 i++;
16             else 
17                 j--;
18         }
19         return res;//如果没找到,返回空list
20     }
21 }
原文地址:https://www.cnblogs.com/zle1992/p/8182434.html