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

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

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

相关推荐

牛客刘北:如果暑期实习是27届的话,你要晚一年才会毕业,企业为什么会等你呢?要搞清时间逻辑呀!27届现在实习只能是在暑假实习,这是日常实习,不是暑期实习。所以多去投日常实习吧,暑期实习肯定不会要你的
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务