Leetcode167. 两数之和 II - 输入有序数组
题目:
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。
函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。
题解:
双指针,一个指针指向值较小的元素,一个指针指向值较大的元素。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。
输入: numbers = [2, 7, 11, 15], target = 9
输出: [1,2]
解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
scala代码如下:
def twoSum(numbers: Array[Int], target: Int): util.ArrayList[Int] = {
val arr = new util.ArrayList[Int]()
var i = 0
var j = numbers.length - 1
var flag = true
while (i < j && flag) {
if (numbers(i) + numbers(j) == target) {
arr.add(i+1)
arr.add(j+1)
flag = false
} else if (numbers(i) + numbers(j) > target) {
j = j - 1
} else {
i = i + 1
}
}
arr
}