Python实践-8和为S的两个数字

Posted jianglin1996

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python实践-8和为S的两个数字相关的知识,希望对你有一定的参考价值。

(剑指offer)输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

思路:选定第一个数字,然后遍历后面的数字求和并与S比较,需要n-1次,不行的话再选定第2,3,,,n个数字,需要n^2次,时间复杂度比较高。更简单的方法可以是定义两个指针,第一个指向第一个元素,第二个指向最后一个元素,两个元素相加,如果等于S则输出这两个元素,如果大于,则将第二个指针向前移一位,再求和进行比较;如果小于,则将第一个指针向前移一位,灾进行求和比较。

 1 def findNumberWithSum(data,tsum):
 2     i=0
 3     j=len(data)-1
 4     if not data or not tsum:
 5         return []
 6     while i<len(data) and j>0:
 7         if data[i]+data[j]==tsum:
 8             return (data[i],data[j])
 9         if data[i]+data[j]>tsum:
10             j=j-1
11         if data[i]+data[j]<tsum:
12             i=i+1
13         return ()

知识点:

1、if not x是判断是否为None的情况,if x is not None这种写法也是可以的。注意代码完备性,需判断传入参数是否为空。

2、涉及到两个元素,想到定义两个指针,避免多层循环。

3、要考虑找不到两个数的情况,可以输出一个空列表或空元组。

以上是关于Python实践-8和为S的两个数字的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer-和为S的两个数字-知识迁移能力-python

python 和为S的两个数字

42.和为S的两个数字(python)

剑指Offer对答如流系列 - 和为s的数字

剑指offer-和为S的两个数字-知识迁移能力-python

剑指offer系列45---和为s的两个数字