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

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

 def findNumberWithSum(data,tsum):
i=0
j=len(data)-1
if not data or not tsum:
return []
while i<len(data) and j>0:
if data[i]+data[j]==tsum:
return (data[i],data[j])
if data[i]+data[j]>tsum:
j=j-1
if data[i]+data[j]<tsum:
i=i+1
return ()

知识点:

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

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

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

最新文章

  1. 稍览了一下CommonJS
  2. linux--杂记(rework)
  3. ansible 使用方法
  4. pip 直接安装tar.gz zip文件包 (windows linux mac 可用)
  5. 【转】SQL Server T-SQL写文本文件
  6. css ie7中overflow:hidden失效问题及解决方法
  7. Jquery Datatables 动态列名
  8. java命名规则
  9. 【转】HDMI控制与组态剖析
  10. Hadoop书籍下载链接
  11. delphi 7 下安装 indy 10.5.8 教程
  12. INS-30011 输入的ADMIN口令不符合Oracle建议的标准
  13. IOS中UITextView(多行文本框)控件的简单用法
  14. MySQL系列详解九:MySQL级联复制演示-技术流ken
  15. idea中git颜色不显示或者文件右键没有git按钮解决方法
  16. Python学习之旅(十四)
  17. UIWindow 介绍:概述、作用、主要属性及方法
  18. JS继承封装
  19. latex 安装和使用
  20. vue-router中参数传递 &amp;&amp; 编程式导航 &amp;&amp; 坑 &amp;&amp; beforeRouteEnter

热门文章

  1. BZOJ_2120_数颜色_Set+树状数组+主席树
  2. 别再问什么是Java内存模型了,看这里!
  3. 关于flask的错误:ImportError: cannot import name &#39;Flask&#39;
  4. TI BLE:读本机地址
  5. bzoj1076: [SCOI2008]奖励关(期望dp+状压dp)
  6. 观光公交 2011年NOIP全国联赛提高组(贪心,递推)
  7. int 多少位,long 多少位
  8. Android Error:Unable to find method &#39;com.android.build.gradle.api.BaseVariant.getOutputs()Ljava/util/List;&#39;.
  9. C#常见问题总结(三)
  10. Windows Socket五种I/O模型——代码全攻略(转)