携手创造,一起成长!这是我参与「日新方案 8 月更文应战」的第23天,点击查看活动概况

前语

咱们社区连续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 工作健身教练。)的 Swift 算法题题解收拾为文字版以方便咱们学习与阅览。

LeetCode 算法到目前咱们已经更新到 166 期,咱们会坚持更新时刻和进度(周一、周三、周五早上 9:00 发布),每期的内容不多,咱们期望咱们能够在上班路上阅览,长久堆集会有很大提高。

不积跬步,无以致千里;不积小流,无以成江海,Swift社区 伴你前行。假如咱们有建议和意见欢迎在文末留言,咱们会尽力满意咱们的需求。

难度水平:中等

1. 描述

给你一个下标从 1 开端的整数数组numbers ,该数组已按 非递减次序排列 ,请你从数组中找出满意相加之和等于方针数target 的两个数。假如设这两个数分别是 numbers[index1]numbers[index2] ,则 1 <= index1 < index2 <= numbers.length

以长度为 2 的整数数组 [index1, index2] 的形式回来这两个整数的下标 index1index2

你能够假定每个输入 只对应唯一的答案 ,并且你 不能够 重复使用相同的元素。

你所设计的解决方案必须只使用常量级的额外空间。

2. 示例

示例 1

输入:numbers = [2,7,11,15], target = 9
输出:[1,2]
解说:2 与 7 之和等于方针数 9 。因而 index1 = 1, index2 = 2 。回来 [1, 2] 。

示例 2

输入:numbers = [2,3,4], target = 6
输出:[1,3]
解说:2 与 4 之和等于方针数 6 。因而 index1 = 1, index2 = 3 。回来 [1, 3] 。

示例 3

输入:numbers = [-1,0], target = -1
输出:[1,2]
解说:-1 与 0 之和等于方针数 -1 。因而 index1 = 1, index2 = 2 。回来 [1, 2] 。

约束条件:

  • 2 <= numbers.length <= 3 * 10^4
  • -1000 <= numbers[i] <= 1000
  • numbers 按 非递减次序 排列
  • -1000 <= target <= 1000
  • 仅存在一个有效答案

3. 答案

class TwoSumII {
    func twoSum(_ numbers: [Int], _ target: Int) -> [Int] {
        if numbers.count <= 1 {
            return [Int]()
        }
        var left = 0, right = numbers.count - 1
        while left < right {
            if numbers[left] + numbers[right] < target {
                left += 1
            } else if numbers[left] + numbers[right] > target {
                right -= 1
            } else {
                return [left + 1, right + 1]
            }
        }
        return [Int]()
    }
}
  • 首要思维:两个指针,左向前移动右向后移动满意右两个和。
  • 时刻复杂度: O(n)
  • 空间复杂度: O(n)

该算法题解的仓库:LeetCode-Swift

点击前往 LeetCode 操练

关于咱们

咱们是由 Swift 爱好者一起维护,咱们会共享以 Swift 实战、SwiftUI、Swift 根底为核心的技术内容,也收拾搜集优异的学习材料。