题目
输入一个递增排序的数组和一个值k,请问如何在数组中找出两个和为k的数字并返回它们的下标?假设数组中存在且只存在一对符合条件的数字,同时一个数字不能使用两次。例如,输入数组[1,2,4,6,10],k的值为8,数组中的数字2与6的和为8,它们的下标分别为1与3。
解题思路
解题思路:
- 异常情况:数组为空,直接返回空数组。
- 采用双指针思路,P(start) 从头部开始,P(end)从尾部开始,若
P(start) + P(end) < target,则 start 向前移动一位;若P(start) + P(end) > target,则 end 向后移动一位,若相等则直接返回 start 和 end。
代码实现
class GetSumIndex {
static func getSumIndex(_ nums: [Int], _ target: Int) -> [Int] {
if nums.isEmpty {
return []
}
var start = 0
var end = nums.count - 1
while nums[start] + nums[end] != target {
if nums[start] + nums[end] < target {
start += 1
} else {
end -= 1
}
}
return [start, end]
}
}