剑指offer_【42】和为s的两个数字

1.题目描述

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

输出描述:

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

2.解题思路

将数组的数值依次放入list里面,每次放入之前查询list里面是否有(sum-array[i]),如果有,再判断两数乘积是否比之前存的两数乘积小,如果判断成功,则将这两个数放到index1和index2中。最后将这两个index放到list里面返回。

3.代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.*;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array, int sum) {
ArrayList<Integer> res = new ArrayList<>();
ArrayList<Integer> ss = new ArrayList<>();
int Min_ = Integer.MAX_VALUE;
//index1用于存放比较小的那个数

int index1 = 0;
//index2用于存放比较大的数

int index2 = 0;
for(int i = 0;i<array.length;i++){
if(res.contains(sum-array[i])){
if(Min_>(sum-array[i])*array[i]){
Min_ = (sum-array[i])*array[i];
index1 = array[i]<(sum-array[i])?
array[i]:(sum-array[i]);

index2 = sum-index1;
}
}else{
res.add(array[i]);
}

}
if(index1!=0||index2!=0){

ss.add(index1);
ss.add(index2);
}

return ss;
}
}
文章目录
  1. 1. 1.题目描述
    1. 1.0.1. 输出描述:
  • 2. 2.解题思路
  • 3. 3.代码
  • | 139.6k