求两个乘积最小的数

(一)题目: 求两个乘积最小的数 

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

思路:
定义两个指针,分别从前面和后面进行遍历,间隔越远的乘积越小,所以是最先出现的两个数乘积最小

(二)代码及测试

package com.example.offer;

import java.util.ArrayList;

/**
 * 求两个乘积最小的数
 *
 * 题目:
 *    输入一个递增排序的数组和一个数字S,在数组中查找两个数,
 * 使得他们的和正好是S,如果有多对数字的和等于S,输出乘积最小的两个数
 *
 * 思路:
 *    定义两个指针,分别从前面和后面进行遍历,间隔越远的乘积越小,所以是最先出现的两个数乘积最小
 * @author zhangchaocai
 * @create 2020-06-28 9:55
 */
public class offer1 {

    public static void main(String[] args) {

        //数组定义的三种方式,写的时候,突然忘了怎么定义,复习一下。擦擦擦
        // 第一种 int[] a = new int[10];
        // for(int i = 0; i < a.length ; i++){
        //     a[i] = i;
        // }

        // 第二种
        //int[] b = new int[]{0, 1, 2, 3, 4, 5, 6};

        //第三种
        int[] array = {1,2,3,4,5,6,7,8,9,10};
        int sum = 12;
        ArrayList<Integer> numberWithSum = getNumberWithSum(array, sum);

        System.out.println("成立的数字为: " + numberWithSum);
    }


    public static ArrayList<Integer> getNumberWithSum(int array[],int sum){

        ArrayList<Integer> list = new ArrayList<>();
        if (array == null || array.length == 0) {
            return list;
        }

        int left = 0;
        int right = array.length - 1;

        while (left < right){
            int s = array[left] + array[right];

            if(s == sum){
                list.add(array[left]);
                list.add(array[right]);
                return list;
            }else{
                if(s > sum){
                    right--;
                }else{
                    left++;
                }
            }
        }
        return list;
    }
}

 (三)运行结果

   


      去做想做的

          快乐......

原文地址:https://www.cnblogs.com/misscai/p/13201828.html