剑指offer -- 和为 S 的两个数字

题目描述

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

AC代码

思路虽然很简单,但是需要注意的地方有很多。
继续努力。

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        if(array == null && array.length <= 1) return null;
        ArrayList<Integer> resList = new ArrayList<>();
        int product = Integer.MAX_VALUE; // 1
        int low = 0;
        int high = array.length - 1;
        Integer num1 = null;  //2
        Integer num2 = null;  //2
        while(low < high){
            if(array[low] + array[high] == sum){
                if(array[low] * array[high] < product){
                    num1 = array[low];
                    num2 = array[high];
                    product = num1 * num2;
                }
                low++; //3
                high--; //3
            }
            else if(array[low] + array[high] < sum) low++;
                 else high--; 
        }
        if(num1 != null && num2 != null){  //4
            resList.add(num1);
            resList.add(num2);
        }
        return resList;
    }
}

猜你喜欢

转载自blog.csdn.net/tkzc_csk/article/details/83614771