题目链接: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 [] } }
|