当前位置: 代码迷 >> 综合 >> 42.和为S的两个数字(java)
  详细解决方案

42.和为S的两个数字(java)

热度:11   发布时间:2024-01-26 23:44:00.0

题目描述

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

输出描述:

对应每个测试案例,输出两个数,小的先输出。

解题思路 

数列满足递增,设两个头尾两个指针i和j,

若ai + aj == sum,就是答案(相差越远乘积越小)

若ai + aj > sum,aj肯定不是答案之一(前面已得出 i 前面的数已是不可能),j -= 1

若ai + aj < sum,ai肯定不是答案之一(前面已得出 j 后面的数已是不可能),i += 1

import java.util.ArrayList;
public class Solution {public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {ArrayList<Integer> list = new ArrayList<>();int i=0,j=array.length-1;while(i<j){if(array[i]+array[j]==sum){list.add(array[i]);list.add(array[j]);return list;  //第一个发现的数一定是最小的}else if(array[i]+array[j]>sum){j--;}else{i++;}}return list;}
}