[Swift]LeetCode167. 两数之和 II - 输入有序数组 | Two Sum II - Input array is sorted
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/9715077.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2.
Note:
- Your returned answers (both index1 and index2) are not zero-based.
- You may assume that each input would have exactly one solution and you may not use the same element twice.
Example:
Input: numbers = [2,7,11,15], target = 9 Output: [1,2] Explanation: The sum of 2 and 7 is 9. Therefore index1 = 1, index2 = 2.
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。
函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。
说明:
- 返回的下标值(index1 和 index2)不是从零开始的。
- 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。
示例:
输入: numbers = [2, 7, 11, 15], target = 9 输出: [1,2] 解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
1 class Solution { 2 func twoSum(_ numbers: [Int], _ target: Int) -> [Int] { 3 var leftIndex:Int = 0 4 var rightIndex:Int = numbers.count - 1 5 while (leftIndex < rightIndex) 6 { 7 var sum = numbers[leftIndex] + numbers[rightIndex] 8 if sum == target 9 { 10 return [leftIndex + 1,rightIndex + 1] 11 } 12 else if sum < target 13 { 14 leftIndex += 1 15 } 16 else 17 { 18 rightIndex -= 1 19 } 20 } 21 return [] 22 } 23 }
16ms
1 class Solution { 2 func twoSum(_ numbers: [Int], _ target: Int) -> [Int] { 3 guard numbers.count >= 2 else { 4 return [] 5 } 6 var dic: [Int:Int] = [:] 7 for i in 0..<numbers.count { 8 let t = target - numbers[i] 9 if dic.keys.contains(t) { 10 return [dic[t]!+1, i+1] 11 } 12 dic[numbers[i]] = i 13 } 14 return [] 15 } 16 }
24ms
1 class Solution { 2 func twoSum(_ numbers: [Int], _ target: Int) -> [Int] { 3 var numIndexDict = [Int : Int]() 4 for (index, num) in numbers.enumerated() { 5 numIndexDict[num] = index 6 } 7 8 for (index, num) in numbers.enumerated() { 9 if let diffIndex = numIndexDict[target - num] { 10 return [index + 1, diffIndex + 1] 11 } 12 } 13 14 return [Int]() 15 } 16 }