[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};
    }
   
}
相关推荐
叠层归一研究院2 分钟前
基于极限自指的叠层归一宇宙结构理论——无元外部封闭系统的内生区分模型
人工智能·经验分享·算法·agi
滕州市燕猫虎计算机科技工作室个体工商户6 分钟前
IDEA:Command line is too long
java·ide·intellij-idea
步行cgn37 分钟前
Spring p 命名空间注入详解
java·前端·spring
YatHinLay41 分钟前
MyBatis 流式查询实战:ResultHandler 处理海量数据
java
天天被压力1 小时前
【跨市场数据实战 #08】可转债折价机会怎么筛:3个接口抓比价、列表和实时盘口
java·人工智能·python
Selvaggia1 小时前
Diffusion Model 的基本原理与模型架构
算法
张某布响丸辣2 小时前
附件下载的安全边界:路径白名单、NAS 哨兵文件与 Redis Lua 一次性令牌
java·redis·redis lua·nas哨兵
YatHinLay2 小时前
Spring Boot + Calcite 实现跨库查询
java
wabs6662 小时前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树
hanlin032 小时前
刷题笔记:力扣第41题-缺失的第一个正数
笔记·算法·leetcode