美文网首页剑指offer最优解Java版
剑指offer最优解Java版-和为S的两个数字

剑指offer最优解Java版-和为S的两个数字

作者: 全菜工程师小辉 | 来源:发表于2019-07-04 18:51 被阅读2次

题目描述

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

输出描述:

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

解决方法

两个数和相等时,差值越大,乘积越小

public class Solution {
    public static ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) {
        int start = 0;
        int end = array.length - 1;
        ArrayList<Integer> result = new ArrayList<>();
        while (start < end) {
            if (array[start] + array[end] == sum) {
                result.add(array[start]);
                result.add(array[end]);
                break;
            }
            while (start < end && (array[start] + array[end]) < sum)
                start++;
            while (start < end && (array[start] + array[end]) > sum)
                end--;
        }
        return result;
    }
}

复杂度分析:

  • 时间复杂度:O(n)。
  • 空间复杂度:O(n)。
哎呀,如果我的名片丢了。微信搜索“全菜工程师小辉”,依然可以找到我

相关文章

网友评论

    本文标题:剑指offer最优解Java版-和为S的两个数字

    本文链接:https://www.haomeiwen.com/subject/ggydcctx.html