《剑指Offer》刷题之和为S的两个数字
我不知道将去向何方,但我已在路上! |
---|
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! |
- 题目:
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
对应每个测试案例,输出两个数,小的先输出。 - 示例:
示例 1 :
输入:[1,2,4,7,11,15],15
返回值:[4,11]
class Solution:
def FindNumbersWithSum(self, array, tsum):
left, right = 0, len(array)-1
while left < right:
if array[left] + array[right] > tsum:
right -= 1
elif array[left] + array[right] < tsum:
left += 1
else:
return [array[left],array[right]]
return []
- 算法说明:
双指针,左右遍历,列表递增;
如果加和大于目标值,左移右指针;
如果加和小于目标值,右移左指针;
第一个等于目标值的数字对就是乘积最小的,返回结果;
如果没有符合条件的,返回空列表。