题目
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
题解
设置头尾两个指针,和比sum大先往左移动尾指针,比sum小往右移动头指针,这样可以保证遍历完所有情况。然后每次都和最小乘积比较并记录。当 头指针>尾指针 时就得出满足题意的结果。
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> res = new ArrayList();
if( array.length==0 ) return res;
int minMul=Integer.MAX_VALUE;
int a=0, b=0; //
int i=0, j=array.length-1; //头、尾游标
while( i<j ){
if( array[i]+array[j] == sum ){
if( array[i]*array[j] < minMul ){
a = array[i];
b = array[j];
minMul = array[i]*array[j];
}
++i;
}else if( array[i]+array[j] > sum ){
--j;
}else {
++i;
}
}
if( !(a==0&&b==0) ){
res.add(a);
res.add(b);
}
return res;
}
}
本文介绍了一种算法,用于在一个递增排序的数组中找到两个数,它们的和等于给定的目标值,并且这两个数的乘积最小。通过使用双指针技巧,该算法能有效地解决这个问题。
276

被折叠的 条评论
为什么被折叠?



