面试题57.1:和为S的两个数字
2019-01-16 本文已影响0人
凌霄文强
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
知识点
数组
Qiang的思路
对于这个问题,只需要设置两个指针,一个指向数组的最左边,一个指向最右边,然后判断两个数的和和S是不是相等,如果相等的话就是要求的解。如果和大于S,说明最大值太大了,只需要将右边的指针往前走。如果小的话就需要将左边的指针往后走。如果两个指针的相对位置发生了改变,就说明并不存在题目要求的两个数,这时返回一个空个list即可。
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
left=0
right=len(array)-1
while left<right:
if array[right]+array[left]==tsum:
return [array[left], array[right]]
elif array[right]+array[left]>tsum:
right-=1
else:
left+=1
return []
作者原创,如需转载及其他问题请邮箱联系:lwqiang_chn@163.com。
个人网站:https://www.myqiang.top。