[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};
    }
   
}
相关推荐
啥都想学点的研究生4 分钟前
一篇文章讲清楚:逻辑回归
算法·机器学习·逻辑回归
pnoker16 分钟前
拆解 IoT DC3:六层微服务架构
java·物联网·spring cloud·微服务·架构
cfm_291422 分钟前
ThreadLocal 内存泄漏
java·jvm
NJCloud28 分钟前
Docker 镜像管理:分层结构、构建优化与最佳实践
java·docker·容器
vipxieliang36 分钟前
收货地址验证完整方案:省市区与详细地址
java·spring boot
Json____43 分钟前
java-宿舍安全卫生检查系统项目源码
java·前端·javascript·课程设计·it学习·wwwoop.com
zzzll11111 小时前
LangChain4j:Java 生态的 AI 应用开发利器
java·开发语言·人工智能
货拉拉技术1 小时前
Agent 场景下 Token 成本优化的实战技巧
算法
hahaha60161 小时前
HLS高层次综合设计技巧--循环merge和循环split
人工智能·算法·计算机视觉
JAI科研1 小时前
Deepseek Agent Harness教程(七) | Deepseek Harness不是一个内核加一堆插件
开发语言·人工智能·深度学习·算法·自然语言处理·transformer·vllm