【剑指Offer】和为S的两个数字

    科技2026-04-10  6

    【题目】

    题目描述:

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

    输出描述:

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

    【思路】

    设置一个最低指针 low 和最高指针 high ,求和。如果结果大于目标值,high–;如果结果小于目标值,low++;否则相等即找到结果(此时找到的也是乘积最小)。

    【代码】

    Java import java.util.ArrayList; public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> result = new ArrayList<>(); int length = array.length; if (length == 0) { return result; } int low = 0, high = length - 1; while (low < high) { long curNum = array[low] + array[high]; if (curNum < sum) { low++; } else if (curNum > sum) { high--; } else { result.add(array[low]); result.add(array[high]); break; } } return result; } }
    Processed: 0.009, SQL: 10