[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};
    }
   
}
相关推荐
wand codemonkey10 小时前
SpringbootWeb【入门】+MySQL【安装】+【DataDrip安装 】+【连接MySQL】
java·mysql·mybatis
Mahir0818 小时前
Spring 循环依赖深度解密:从问题本质到三级缓存源码级解析
java·后端·spring·缓存·面试·循环依赖·三级缓存
RyFit19 小时前
SpringAI 常见问题及解决方案大全
java·ai
石山代码19 小时前
C++ 内存分区 堆区
java·开发语言·c++
心中有国也有家19 小时前
cann-recipes-infer:昇腾 NPU 推理的“菜谱集合”
经验分享·笔记·学习·算法
绝知此事19 小时前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
无风听海19 小时前
C# 隐式转换深度解析
java·开发语言·c#
碧海银沙音频科技研究院19 小时前
通话AEC与语音识别AEC的软硬回采链路
深度学习·算法·语音识别
一只大袋鼠20 小时前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git
csdn_aspnet20 小时前
Python 算法快闪 LeetCode 编号 70 - 爬楼梯
python·算法·leetcode·职场和发展