题目描述
在升序数组中寻找满足指定sum的两个元素,如果有多对满足,返回乘积最小的那对;
- 实现方法
和相同的两个元素,差越大的乘积越小;左右指针分别移动;
package DayCode;
import java.util.ArrayList;
/**
* @author Ethan
* @desc 在指定的升序数组中寻找满足sum的两个数字,如果有多对,返回其中乘积最小的
*/
public class C41_1FindNumbersWithSum {
/**
* @author Ethan
* @desc 前后指针,间隔越远乘积越小
*/
public ArrayList<Integer> findNumbers(int[] nums,int sum){
ArrayList<Integer> al = new ArrayList<>();
//1-异常参数检测
if(nums == null || nums.length == 0){
return al;
}
//2-初始化 left: right: curSum:
int left = 0;
int right = nums.length - 1;
int curSum = 0;
//3-左右指针移动
while(left < right){
curSum = nums[left] + nums[right];
if(curSum == sum){
al.add(nums[left]);
al.add(nums[right]);
return al;
}else{
if(curSum > sum){
right--;
}else{
left++;
}
}
}
return al;
}
}