美文网首页
【算法题】27.两数之和 II - 输入有序数组

【算法题】27.两数之和 II - 输入有序数组

作者: _涼城 | 来源:发表于2022-05-02 08:23 被阅读0次

题目

给你一个下标从 1 开始的整数数组numbers,该数组已按非递减顺序排列,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1]numbers[index2] ,则 1 <= index1 < index2 <= numbers.length

以长度为 2 的整数数组 [index_1, index_2] 的形式返回这两个整数的下标 index_1index_2

你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。

你所设计的解决方案必须只使用常量级的额外空间。

示例1

输入:numbers = [2,7,11,15], target = 9
输出:[1,2]
解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。

示例2

输入:numbers = [-1,0], target = -1
输出:[1,2]
解释:-1 与 0 之和等于目标数 -1 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。

思路

使用双指针,左指针指向数组头部,右指针指向数组尾部,压缩搜索空间进行查找。

代码实现

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize){
      int left = 0;
      int right = numbersSize - 1;
      int * result = (int *)malloc(sizeof(int) * 2);
       *returnSize = 2;
      while(left < right){
          int temp = numbers[left] + numbers[right];
          if(temp < target){
              left++;
          }else if(temp > target){
                  right--;
          }else{
              result[0] = left+1;
              result[1] = right+1;
              return result;
          }
      }
     result[0] = -1;
     result[1] = -1;
     return result;
      
}


相关文章

网友评论

      本文标题:【算法题】27.两数之和 II - 输入有序数组

      本文链接:https://www.haomeiwen.com/subject/tmmmyrtx.html