当前位置: 首页 > article >正文

两数之和II-输入有序数组

hello 大家好!今天开写一个新章节,每一天一道算法题。让我们一起来学习算法思维吧!

在这里插入图片描述

function twoSum(numbers, target) {
    // 初始化左右指针,左指针指向数组第一个元素(索引为 0)
    let left = 0;
    // 右指针指向数组最后一个元素
    let right = numbers.length - 1;

    // 开始双指针遍历,只要左指针小于右指针就继续循环
    while (left < right) {
        // 计算当前左右指针所指元素的和
        const currentSum = numbers[left] + numbers[right];

        // 如果当前和等于目标值
        if (currentSum === target) {
            // 因为题目要求下标从 1 开始,所以将索引加 1 后返回
            return [left + 1, right + 1];
        } 
        // 如果当前和小于目标值,说明需要增大和,将左指针右移一位
        else if (currentSum < target) {
            left++;
        } 
        // 如果当前和大于目标值,说明需要减小和,将右指针左移一位
        else {
            right--;
        }
    }
    // 理论上不会执行到这里,因为题目保证有唯一解
    return [];
}

// 测试示例
const numbers = [2, 7, 11, 15];
const target = 9;
console.log(twoSum(numbers, target)); 

代码解释

整体思路
本题使用双指针法来解决,因为数组是按非递减顺序排列的。我们设置两个指针,一个在数组开头(左指针),一个在数组末尾(右指针)。通过计算两个指针所指元素的和,并与目标值比较,根据比较结果移动指针,逐步缩小查找范围,直到找到满足条件的两个元素。

代码步骤分析

初始化指针:

  • left 指针初始化为 0,表示数组的第一个元素。
  • right 指针初始化为 numbers.length - 1,表示数组的最后一个元素。

双指针遍历:

  • 使用 while 循环,只要 left 小于 right 就继续循环。
  • 在每次循环中,计算 numbers[left] 和 numbers[right] 的和 currentSum。
  • 如果 currentSum 等于 target,说明找到了满足条件的两个元素,将它们的下标(加 1 以符合题目要求从 1
    开始)作为数组返回。
  • 如果 currentSum 小于 target,说明当前和太小,需要增大和,将 left 指针右移一位。
  • 如果 currentSum 大于 target,说明当前和太大,需要减小和,将 right 指针左移一位。

返回结果:

  • 由于题目保证有唯一解,所以在找到满足条件的元素后会返回结果,理论上不会执行到返回空数组这一步。

http://www.kler.cn/a/523223.html

相关文章:

  • 元素的显示与隐藏
  • unity实现回旋镖函数
  • 认识小程序的基本组成结构
  • 力扣【669. 修剪二叉搜索树】Java题解
  • 蓝桥杯例题四
  • 可爱狗狗的404动画页面HTML源码
  • Linux一键巡检脚本
  • c++学习第十四天
  • Android Studio 新版本24.2.2 运行后自动切到 LogCat
  • K8S中数据存储之配置存储
  • 【股票数据API接口33】如何获取股票当天逐笔交易数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • Object类(3)
  • 24-25出差交流体会-25-01-28
  • 虚拟世界中的社交互动:Facebook如何改变元宇宙中的沟通方式
  • 网络工程师 (5)系统可靠性
  • 神经网络|(七)概率论基础知识-贝叶斯公式
  • Deepseek-R1模型背后的中国AI突围之路
  • Ollama+DeepSeek本地大模型部署
  • 上位机知识篇---DDSSDK
  • 【算法】记忆化搜索
  • RoboVLM——通用机器人策略的VLA设计哲学:如何选择骨干网络、如何构建VLA架构、何时添加跨本体数据
  • 网站结构优化:加速搜索引擎收录的关键
  • 【AI论文】扩散对抗后训练用于一步视频生成总结
  • 菜鸟之路Day10一一集合进阶(三)
  • 网络工程师 (6)操作系统概述
  • 浅析 CSS 中块级框,块容器框和块框