和为S的两个数字

和为S的两个数字

https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b?tpId=13&&tqId=11195&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

直接使用双指针,只是题目多加了一个限定,输出乘积最小的那一组。

public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        int l = 0, r = array.length-1;
        ArrayList<Integer> res = new ArrayList<>();
        int multiply = Integer.MAX_VALUE;
        while(l < r){
            int value = array[l]+array[r];
            if(value < sum)
                l++;
            else if(value > sum)
                r--;
            else {
                if(multiply > array[l]*array[r]){
                    multiply = array[l]*array[r];
                    res.clear();
                    res.add(array[l]);
                    res.add(array[r]);
                }
                l++;
                r--;
            }
        }
        return res;
    }

最后发现,其实两数距离最远的那一组的乘积最小,所以可以修改为下面的代码

public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {

        int l = 0, r = array.length-1;
        ArrayList<Integer> res = new ArrayList<>();
        while(l < r){
            int value = array[l]+array[r];
            if(value < sum)
                l++;
            else if(value > sum)
                r--;
            else {
                 res.add(array[l]);
                 res.add(array[r]);
                return res;
            }
        }
        return res;
    }
剑指offer 文章被收录于专栏

为刷过的每一道题都书写一篇题解,便于重复练习~

全部评论

相关推荐

头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

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