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

Leetcode 两数之和 Ⅱ - 输入有序数组

在这里插入图片描述

这段代码实现了在一个非递减排序的数组中找到两个数,使它们的和等于目标值的算法。算法使用了双指针技术,具体思想如下:

算法思想:

  1. 初始化指针:定义两个指针 leftright,分别指向数组的起始位置和末尾位置。left 从左向右遍历,right 从右向左遍历。

  2. 计算当前和

    • 在循环中,每次计算 numbers[left]numbers[right] 的和,记为 sum
  3. 判断是否满足目标值

    • 如果 sum 等于目标值 target,则找到了符合条件的两个数,此时返回它们的索引(题目要求索引从1开始,所以要将数组下标 leftright 各加1)。
    • 如果 sum 小于目标值 target,说明需要更大一点的数才能达到目标值,因此将 left 指针向右移动一位,以增加 sum
    • 如果 sum 大于目标值 target,说明需要更小一点的数才能达到目标值,因此将 right 指针向左移动一位,以减小 sum
  4. 返回结果

    • 如果在循环结束后没有找到符合条件的两个数,返回一个空数组(虽然根据题目描述,总会有一个解,因此这一步通常不会被执行)。

时间复杂度

该算法的时间复杂度是 (O(n)),因为每次循环中指针 leftright 都会向中间移动,最多需要遍历整个数组一次。

总结

此算法利用了数组的有序性,通过双指针逐步逼近目标值,避免了暴力解法的多重循环,从而提升了效率。

java solution

class Solution {public int[] twoSum(int[] numbers, int target) {int left = 0;int right = numbers.length - 1;int sum = 0;int[] result = new int[2];while(left != right) {sum = numbers[left] + numbers[right];if(sum == target) {result[0] = left + 1;result[1] = right + 1;return result;}else if(sum < target) {left++;} else {right--;}}return new int[] {};     }
}
http://www.lryc.cn/news/481324.html

相关文章:

  • 多处理器一致协议(MSI)协议详细介绍
  • SSH实验5密钥登录Linuxroot用户(免密登录)
  • 2024 网鼎杯 - 青龙组 Web WP
  • ORACLE 闪回技术简介
  • 【笔记】LLC电路工作频点选择 2-2 开关管与滤波压力
  • 【CUDA】认识CUDA
  • Linux(CentOS)yum update -y 事故
  • AI绘画赚钱秘籍!掌握ai绘画赚钱技巧,开启副业新篇章,ai绘画赚钱实战指南!
  • HCIP-HarmonyOS Application Developer V1.0 笔记(四)
  • 【前端】Svelte:组件封装与使用
  • STM32标准库-待机模式
  • 【论文笔记】The Power of Scale for Parameter-Efficient Prompt Tuning
  • 几个docker可用的镜像源
  • Spring学习笔记_27——@EnableLoadTimeWeaving
  • 【数据分析】如何构建指标体系?
  • 大数据程序猿不可不看的资料大全
  • 【架构设计常见技术】
  • LLMs之MemFree:MemFree的简介、安装和使用方法、案例应用之详细攻略
  • Hive简介 | 体系结构
  • [C++] GDB的调试和自动化检测
  • 车机版 Android Audio 框架笔记
  • 【NLP自然语言处理】深入解析Encoder与Decoder模块:结构、作用与深度学习应用
  • 【JAVA EE】多线程、锁、线程池的使用
  • 云计算:定义、类型及对企业的影响
  • 大数据面试题--kafka夺命连环问
  • 【大模型】Spring AI Alibaba 对接百炼平台大模型使用详解
  • Zabbix如何配置将信息发送到邮件
  • jmeter常用配置元件介绍总结之前置处理器、测试片段
  • Redis2:Redis数据结构介绍、通用命令、String类型、Key的层级格式
  • jenkins流水线pipeline