剑指offer—和为s的两个数字

来源:互联网 发布:数学建模常用算法 编辑:程序博客网 时间:2024/05/22 16:46

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

import java.util.ArrayList;public class Solution {    public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {        ArrayList<Integer> res = new ArrayList<Integer>();        if(array==null || array.length<=0) return res;        int index1 = 0;        int index2 = array.length-1;        while(index1<index2){            if(array[index1]+array[index2]==sum){                res.add(array[index1]);                res.add(array[index2]);                break;            }else if(array[index1]+array[index2]<sum){                index1++;            }else{                index2--;            }        }        return res;    }}

思路:由于数组是递增的,因此可以使用一头一尾两个指针,如果两个指针对应的数组值等于目标值则返回,如果大于目标值,则后面的指针前移,反之,前面的指针后移