题目描述:
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
思路:
双指针
代码
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
if not array or array==[]:
return []
p1,p2=0,array.index(array[-1])
res=dict()
while p2-p1>=1:#终止的条件是两个指针相邻
while p2-p1>=1 and array[p1]+array[p2]<tsum:#如果两数之和小于给定的和
p1+=1#前面的指针向后走
while p2-p1>=1 and array[p1]+array[p2]>tsum:
p2-=1#如果当前两数之和大于给定的和,后面的指针向后走
while p2-p1>=1 and array[p1]+array[p2]==tsum:
res[str(array[p1]*array[p2])]=[array[p1],array[p2]]#若果相等的话,就存入字典,并且前面的指针往后走
p1+=1
return [] if not res else res[sorted(res,cmp=lambda x,y:int(x)-int(y))[0]]