[Java][Leetcode middle] 167. 两数之和 II - 输入有序数组

官解1:由于输入数组是有序的,因此考虑二分查找

依次循环i,在i之后的元素中寻找j,如果可以找到就返回,找不到继续循环。

java 复制代码
class Solution {
    public int[] twoSum(int[] numbers, int target) {
       int len = numbers.length;
       for(int i=0;i<len;i++){
          int j = target - numbers[i];
          int left = i+1;
          int right = len - 1;
          while(left <= right){
              int mid = left + (right - left)/2;
              if(numbers[mid] == j){
                return new int[]{i+1, mid+1};
              }else if(numbers[mid] < j){
                 left = mid + 1;
              }else{
                 right = mid - 1;
              }
          }
       }
       return new int[]{-1,-1};
    }
}

管解2: 官解

使用左右两个指针

  • 当两数之和等于目标是,说明找到了,返回
  • 当大于目标时,说明大了,使较大的数(右侧的数)-1
  • 当小于目标时,说明小了,使较小的数(左侧的数)+1
java 复制代码
class Solution {
    public int[] twoSum(int[] numbers, int target) {
       int start = 0;
       int end = numbers.length -1;

       while(start < end){
           if(numbers[start] + numbers[end] == target){
              return new int[]{start+1, end+1};
           }else if(numbers[start] + numbers[end] > target){
              end--;
           }else{
              start++;
           }
       }
       return new int[]{-1,-1};
    }
   
}
相关推荐
Wang's Blog几秒前
Java 项目部署之 Docker工具快速入门: Docker 是什么以及它如何解决部署环境问题
java·开发语言·docker
老木避暑研究所5 分钟前
从原始数据到洞察:一次完整的避暑房环境数据采集、清洗与可视化分析
java·开发语言
怪奇云呼军10 分钟前
教育试听预约后没到课,闪电智能 Voice Agent 如何做分层回访?
人工智能·python·算法·云计算·音视频
Nil20816 分钟前
leetcode 416分割等和子集
算法·leetcode·职场和发展
云淡风轻~窗明几净18 分钟前
角谷猜想的进展之三 移动了群山/沸騰的群山 2026-10-10
人工智能·算法·dubbo·图论
前端 贾公子30 分钟前
LangGraph == 图的状态(State)管理 (上)
java·开发语言·数据库
huaweichenai37 分钟前
spring boot 实现file文件上传
java·spring boot·后端
ForeverYang201537 分钟前
一种无需训练缺陷数据生成算法--O2MAG
人工智能·深度学习·算法
VX_bysjlw9851 小时前
数码设备销售网站设计与实现39138-计算机毕设原创(免费领源码+带部署教程)
java·vue.js·spring boot·mysql·tomcat·mybatis·idea
荣码1 小时前
从0到1搭一个生产级RAG系统:串联前面21篇所有知识
java·python