题解 | #和为S的两个数字#
和为S的两个数字
https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b
import java.util.ArrayList; public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array, int sum) { ArrayList<Integer> result = new ArrayList<>(); long multyp = 999999999; int l = 0, r = array.length - 1; while (l < r) { if (array[l] + array[r] == sum) { if (array[l] * array[r] < multyp) { // 判断是否为最小乘积,如果是则重置返回结果值 multyp = array[l] * array[r]; result.clear(); result.add(array[l]); result.add(array[r]); } l++; r--; } else if (array[l] + array[r] > sum) { r--; } else { l++; } } return result; } }
解题思想:
* 方式一:暴力遍历:直接遍历每两个数,查看其和是否符合等于 sum ,再计算其乘积,是否⼩于之前的乘积,如果⼩于,则更新。
* 方式二:hashset:针对每⼀个数字 a ,都查看 hashset 中是否存在 sum-a ,同时把该数字添加到 set中。如果存在则计算其乘积,更新乘积最⼩值。
* 方式三:双指针,小于则左指针++ ,大于则右指针--,否则判断是否最小乘积进行结果值重置。
#算法##算法笔记#