1, 题目

给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。

函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。

说明:

返回的下标值(index1 和 index2)不是从零开始的。
你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。
示例:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2, 算法

  1. object Solution {
  2. def twoSum(numbers: Array[Int], target: Int): Array[Int] = {
  3. var i = 1
  4. var j = numbers.length
  5. val result = Array(i, j)
  6. while (i < j) {
  7. val sum = numbers(i - 1) + numbers(j - 1)
  8. if (sum == target) {
  9. result(0) = i
  10. result(1) = j
  11. j = i
  12. } else if (sum < target) {
  13. i += 1
  14. } else {
  15. j -= 1
  16. }
  17. }
  18. result
  19. }
  20. }
  1. class Solution:
  2. def twoSum(self, numbers: List[int], target: int) -> List[int]:
  3. i = 1
  4. j = len(numbers)
  5. while i < j:
  6. sum = numbers[i - 1] + numbers[j - 1]
  7. if sum == target:
  8. return [i, j]
  9. elif sum < target:
  10. i += 1
  11. else:
  12. j -= 1