You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用双指针遍历有序数组查找和为20的元素对并返回较小值索引

双指针查找升序数组和为20元素对 修正方案

原代码核心问题

  • 错误使用两层for循环实现双指针逻辑,双指针仅需单次循环移动左右索引即可,时间复杂度为O(n),远优于两层循环的O(n²)
  • 未正确移动指针索引,反而直接修改输入数组的元素值,导致数组原始值被破坏,逻辑完全偏离预期
  • 找到符合条件的元素对后做了无意义的大小判断:升序数组左指针对应值必然小于右指针值,左索引就是较小值的索引
  • 初始返回值设置错误,未命中时应返回-1而非数组长度

修正后的代码

checkSum方法:

public static int checkSum(int[] array){
    // 左指针初始在数组头部
    int left = 0;
    // 右指针初始在数组尾部
    int right = array.length - 1;
    while (left < right) {
        int sum = array[left] + array[right];
        if (sum == 20) {
            // 升序数组左值更小,直接返回左索引
            return left;
        } else if (sum > 20) {
            // 和大于20,右指针左移
            right--;
        } else {
            // 和小于20,左指针右移
            left++;
        }
    }
    // 遍历完没找到符合条件的对
    return -1;
}

main测试方法无需修改,运行后四个测试用例均可正常通过,不会抛出错误提示。

内容的提问来源于stack exchange,提问作者Paige

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:39:00