和为S的两个数

2019-04-06  本文已影响0人  zhouwaiqiang

题目描述

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

输出描述

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

求解过程

解题源代码

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        ArrayList<Integer> result = new ArrayList<>();
        if (array==null || array.length==0) return result;
        int low = 0;
        int high = array.length-1;
        while (low<high) {
            int rest = sum - array[low];
            high = getTarget(array, low+1, high, rest);
            if (array[high]!=rest) low++;
            else {
                result.add(array[low]);
                result.add(array[high]);
                break;
            }
        }
        return result;
    }
    
    private static int getTarget(int[] array, int start, int end, int target) {
        int low = start;
        int high = end;
        while (low<=high) {
            int mid = low + (high-low)/2;
            if (array[mid]==target) return mid;
            else if (array[mid] > target) high = mid-1;
            else low = mid+1;
        }
        //未找到,将较小的下标值返回
        return high;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读