167. 两数之和 II - 输入有序数组

题目链接:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/

太巧了,两种方法都是24ms

方法一:

1 一开始字典为空,存入数组中的元素作为key,下标作为value,
2 搜索target与数组[i]所指元素之间的差值,
3 差值对应的value即对应数组中的下标。
4 返回时应先将字典返回的value 放在前面,因为它在数组中先被访问到并存入字典,而搜索时的[i]元素排在value之后

代码

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
func twoSum(_ numbers: [Int], _ target: Int) -> [Int] {
var dict = [Int: Int]()
for i in 0 ..< numbers.count {
if let j = dict[target - numbers[i]]{
return [j+1, i+1]
}
dict[numbers[i]] = i
}
return []
}
}

方法二:

当sum > target 时说明应该使较大值变小,才会更靠近target,所以high - 1,反之增加左值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
func twoSum(_ numbers: [Int], _ target: Int) -> [Int] {
var low = 0, high = numbers.count - 1 , sum = 0
while low < high {
sum = numbers[low] + numbers[high]
if sum == target {
return [low+1, high+1]
}else if sum > target {
high -= 1
}else {
low += 1
}
}
return []
}
}

167. 两数之和 II - 输入有序数组
https://pisces34.github.io/2021/08/20/leetcode/167/
发布于
2021年8月20日
许可协议