题解 | #和为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中。如果存在则计算其乘积,更新乘积最⼩值。

* 方式三:双指针,小于则左指针++ ,大于则右指针--,否则判断是否最小乘积进行结果值重置。

#算法##算法笔记#
全部评论

相关推荐

安静的垂耳兔在泡澡:ks已经第八次投递了,它起码挂了还让你再投,不错了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务