输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]
示例 2:
输入:nums = [10,26,30,31,47,60], target = 40
输出:[10,30] 或者 [30,10]
解题思路:
1.由于数组是排好序且递增的,先判断数组元素个数,小于2个的,直接返回空数组;
2.取出数组的第一个元素和最后一个元素,对两个元素的和与目标数字进行大小比较,若两数之和大于目标元素,将最后一个元素位置向前移动一位,再次进行比较;若两数之和小于目标元素,则将第一个元素的位置向后移动一位,再次比较;若相等,返回这两个元素。
3.一直循环直到第一个元素位置大于最后一个元素位置
代码:
func twoSum(_ nums: [Int], _ target: Int) -> [Int] {
if nums.count < 2 {
return []
}
var first = 0
var last = nums.count-1
while first < last {
let sum = nums[first]+nums[last]
if sum > target {
last = last - 1
}else if sum < target {
first = first + 1
}else {
return [nums[first],nums[last]]
}
}
return []
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-wei-sde-liang-ge-shu-zi-lcof