1. 题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
题目分析:
- 递增的序列,定义两个数组的下标索引index,left = 0;right = array.length-1
- 对于多个数字等于S,输出乘积最小的两位数。也就是最外层的数,1,2,3,4;也就是1,4的乘积最小
- 当和小于sum的时候,left++;当和大于sum的时候,right--;
- 注意return返回值,当return在while循环体内出现的时候,return代表结束循环所在方法体
2. 代码实现
import java.util.ArrayList;
import java.util.*;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
/*
1. 外部的符号条件的乘积是最小的
2. 两个类似的指针,left开头,right结尾
3. 如果和小于sum,说明和太小了,left右移动,增大和
4. 如果和大于sum,说明和太大了,right左移动,减小和
*/
ArrayList<Integer> list = new ArrayList<>();
//判断数组死否为空,为空的话直接返回list
if(array == null || array.length == 0){
return list;
}
//定义数组的两个指针
int left = 0;
int right = array.length - 1;
//当left < right,也就是数组的两边往中间靠近,相向而行
while(left < right){
//对相对的元素求和比较
int total = array[left] + array[right];
if(total == sum){
//等于的话将将数组中的元素添加到集合中
list.add(array[left]);
list.add(array[right]);
//结束整个方法
return list;
}else if(total > sum){
--right;
}else{
++left;
}
}
return list;
}
}