剑指 - 排序数组中的两个数字之和(Swift)

49 阅读1分钟

题目

输入一个递增排序的数组和一个值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]
    }
}