(一)题目: 求两个乘积最小的数
题目:
输入一个递增排序的数组和一个数字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; } }
(三)运行结果
去做想做的
快乐......