有序数组中求和为给定值的两个数

有序数组中求和为给定值的两个数

问题

这个题目说的是,给你一个整数数组,并且这个数组是按递增排序的,你要找到数组中的两个整数,它们的和等于给定的目标值,然后返回它们的下标。题目假设给你的数组总是有且只有一个解,而且同一个元素不能使用两次。另外,返回结果的下标要从 1 开始

比如说给你的数组是:

1, 2, 3, 6, 8, 11

目标值是 10。那么,满足条件的两个整数是,2 和 8,它们的和是 10。所以你要返回它们的下标是 [2, 5]。

代码

public class AlgoCasts {

  // Time: O(n), Space: O(1)
  public int[] getTwoNumSumToGivenValue(int[] numbers, int target) {
    int i = 0, j = numbers.length - 1;
    while (i < j) {
      if (numbers[i] + numbers[j] > target) --j;
      else if (numbers[i] + numbers[j] < target) ++i;
      else return new int[]{i + 1, j + 1};
    }
    return new int[]{-1, -1};
  }

}

 上一篇
需要排序的最短子数组 需要排序的最短子数组
需要排序的最短子数组问题 这个题目说的是,给你一个整数数组,你要找到一个最短的子数组,只要把它按递增排序,那么整个数组就变成递增有序。最后返回这个最短子数组的长度。注意,子数组要求是连续的。 比如说,给你的数组是 0, 2, 4, 1, 8
2019-01-06
下一篇 
最小硬币组合 最小硬币组合
最小硬币组合问题 这个题目说的是,给你一些面值不同的硬币,每一种面值的硬币都有无限多个,现在你要用这些硬币组成一个给定的数值,那么请问,最少需要多少个硬币。另外,如果给你的面值无法组成给定数值,就返回 -1。 比如说,给你的硬币有 1 分
2019-01-06
  目录