携手创造,一起成长!这是我参与「日新方案 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]
的形式回来这两个整数的下标 index1
和 index2
。
你能够假定每个输入 只对应唯一的答案 ,并且你 不能够 重复使用相同的元素。
你所设计的解决方案必须只使用常量级的额外空间。
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 根底为核心的技术内容,也收拾搜集优异的学习材料。