Java实现:在升序数组中查找和为指定值的两个数

以下是使用Java代码实现在升序数组中找到两个数字,使其和等于指定值的示例:

public class TwoSum {
    public static void findTwoNumbers(int[] arr, int targetSum) {
        int left = 0;
        int right = arr.length - 1;

        while (left < right) {
            int currentSum = arr[left] + arr[right];

            if (currentSum == targetSum) {
                System.out.println('找到了满足条件的两个数字:' + arr[left] + ' 和 ' + arr[right]);
                return;
            } else if (currentSum < targetSum) {
                left++;
            } else {
                right--;
            }
        }

        System.out.println('在给定的升序数组中未找到满足条件的两个数字。');
    }

    public static void main(String[] args) {
        int[] arr = {1, 2, 4, 7, 12, 15};
        int targetSum = 14;

        findTwoNumbers(arr, targetSum);
    }
}

输出结果:

找到了满足条件的两个数字:2 和 12

这段代码通过双指针法,在时间复杂度为O(n)的情况下找到了满足条件的两个数字。

代码解释:

  1. 双指针法: 该代码使用双指针法,即使用两个指针 leftright 分别指向数组的起始和结束位置。
  2. 循环比较: 在循环中,比较 arr[left] + arr[right] 与目标值 targetSum 的大小关系。
  3. 更新指针:
    • 如果 currentSum 等于 targetSum,则找到了目标数字,输出结果并返回。
    • 如果 currentSum 小于 targetSum,则需要增大 left 指针,指向更大的数字。
    • 如果 currentSum 大于 targetSum,则需要减小 right 指针,指向更小的数字。
  4. 未找到结果: 如果循环结束后仍未找到满足条件的两个数字,则输出未找到的提示信息。

优势:

  • 高效: 双指针法的时间复杂度为O(n),比暴力枚举所有组合的O(n^2)效率更高。
  • 简洁易懂: 代码逻辑清晰,易于理解和实现。

原文地址: https://www.cveoy.top/t/topic/lPi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录