LeetCode刷题题解笔记 数组(一) --2. 两数之和(输入有序数组)(java)

LeetCode刷题题解笔记 数组(二) --两数之和(输入有序数组)

题目

给定一个已按照升序排列的有序数组,找到两个数使的他们相加之和等于目标数。
函数应该返回这两个下标值index1和index2,其中index1必须小于index2.
说明:

  • 返回的下标值不是从零开始的。
  • 可以假设每个输入只对应唯一的答案,而且不可以重复使用相同的元素。
    实例:
  • 输入:numbers = [2,7,11,15],target=9
  • 输出:[1,2]
  • 解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。

–解题思路
使用双指针
升序排列有序数组,先取第一位numbers[i]和最后一位numbers[j],它们的和sum和target比较

  • sum>target,numbers[j]应该左移,j减小。
  • sum<target,numbers[i]应该右移,i增加。
  • sum=target,返回对应的i,j。
    在这里插入图片描述
    代码
class Solution {
    public int[] twoSum(int[] numbers, int target) {
      //如果数组为空,返回空
      if(numbers.length==0) return null;
      //定义左边的下标和右边的下标
      int i =0;
      int j = numbers.length;
      
      while(i<j){
       int sum =numbers[i]+numbers[j];
       if(sum==target){
         return new int[]{i+1,j+1};
        }else if(sum>target){
          j--;
         }else{
           i++;
          }
       }
       return null;
     }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值