python算法 - 快速寻找满足条件的两个数-乾颐堂
题目前提是一定存在这样两个数
解法一就不写了...一般想不到吧
一开始想到的是解法二最后的用hash表
(其实是想到创建一个跟target一样大的数组啦..存在就写入index,但是要全部找出,那得二维数组,但是后面想到target要是很大的话,是不是浪费空间了...所以改成Dict)
后面发现题目只要求给出两个数就好了啊- -
扩展问题比较有意思
找三个应该不难,其它还不清楚,有想再补充...
1.二维数组
1
2
3
4
5
6
7
8
9
10
11
12
|
def find_pair(A, target): B = [[] for i in range (target + 1 )] for i in range ( 0 , len (A)): if A[i] < = target: B[A[i]].append(i) for i in range ( 0 , target / 2 + 1 ): if len (B[i]) ! = 0 and len (B[target - i]) ! = 0 : print (i, B[i], target - i, B[target - i]) if __name__ = = "__main__" : A = [ 0 , 1 , 1 , 2 , 11 , 8 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] find_pair(A, 9 ) |
2.字典
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
def find_pair(A, target): B = {} for i in range ( 0 , len (A)): if A[i] < = target: if not B.has_key(A[i]): B[A[i]] = [i] else : B[A[i]].append(i) for i in range ( 0 , target / 2 + 1 ): if B.has_key(i) and B.has_key(target - i): print (i, B[i], target - i, B[target - i]) if __name__ = = "__main__" : A = [ 0 , 1 , 1 , 2 , 11 , 8 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] find_pair(A, 9 ) |
3.这种方法都已经重新排序了,不知道书上还返回索引有什么意义...排序偷懒直接用内置的啦...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
def find_pair(A, target): A.sort() i, j = 0 , len (A) - 1 while i < j: s = A[i] + A[j] if s = = target: print (i, A[i], j, A[j]) i + = 1 j - = 1 elif s < target: i + = 1 else : j - = 1 if __name__ = = "__main__" : A = [ 0 , 1 , 1 , 2 , 11 , 8 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] find_pair(A, 9 ) |
www.qytang.com/
http://www.qytang.com/cn/list/29/
http://www.qytang.com/cn/list/28/446.htm
http://www.qytang.com/cn/list/28/445.htm
http://www.qytang.com/cn/list/28/444.htm
http://www.qytang.com/cn/list/28/442.htm
http://www.qytang.com/cn/list/28/440.htm
http://www.qytang.com/cn/list/28/437.htm
http://www.qytang.com/cn/list/28/435.htm
http://www.qytang.com/cn/list/28/434.htm
http://www.qytang.com/cn/list/28/433.htm
http://www.qytang.com/cn/list/28/431.htm
http://www.qytang.com/cn/list/28/328.htm
http://www.qytang.com/cn/list/28/326.htm
http://www.qytang.com/cn/list/28/429.htm
python算法 - 快速寻找满足条件的两个数-乾颐堂的更多相关文章
- python socket编程入门(编写server实例)-乾颐堂
python 编写server的步骤: 1. 第一步是创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) family参 ...
- Python手机开发调用DLL实现部分ADB功能-乾颐堂
近期学了一点Python,然后正好有一个手机同步工具方面的预研工作要完成. 要实现PC与手机的通信,首先要找到他们的通信协议,还好的是Android有完善的协议:ADB ADB的代码是开源的,而且支持 ...
- python基础之删除文件及删除目录的方法-乾颐堂
下面来看一下python里面是如何删除一个文件及文件夹的~~ 首先引入OS模块 import os 删除文件: os.remove() 删除空目录: os.rmdir() 递归删除空目录: os.re ...
- python中执行命令的3种方法小结-乾颐堂
目前我使用到的python中执行cmd的方式有三种: 1. 使用os.system("cmd") 特点是执行的时候程序会打出cmd在linux上执行的信息. import os o ...
- 用 python 实现各种排序算法-乾颐堂
总结了一下常见集中排序的算法 归并排序 归并排序也称合并排序,是分治法的典型应用.分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并. 具体的归并排序就是,将一组无序数按n/2递归分解成 ...
- python多线程编程5: 条件变量同步-乾颐堂
互斥锁是最简单的线程同步机制,Python提供的Condition对象提供了对复杂线程同步问题的支持.Condition被称为条件变量,除了提供与Lock类似的acquire和release方法外,还 ...
- python实现高效率的排列组合算法-乾颐堂
组合算法 本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标 代表的数被选中,为0则没选中. 首先初始化,将数组前n个元素置1,表示第一个组合为前n个数. 然后从左到右扫描数组 ...
- 朴素贝叶斯算法的python实现-乾颐堂
算法优缺点 优点:在数据较少的情况下依然有效,可以处理多类别问题 缺点:对输入数据的准备方式敏感 适用数据类型:标称型数据 算法思想: 朴素贝叶斯 比如我们想判断一个邮件是不是垃圾邮件,那么我们知道的 ...
- Python实现字符的冒泡排序——说实话,两个数兑换的方法震惊了我,一天比一天感受到了Python的强大
import random M= lettList=[] for i in range(M): lettList.append(chr(random.randrange(,))) for lett i ...
随机推荐
- offsetTop/offsetHeight scrollTop/scrollHeight 的区别
offsetTop/offsetHeight scrollTop/scrollHeight 这几个属性困扰了我N久,这次一定要搞定. 假设 obj 为某个 HTML 控件. obj.offset ...
- javascript数组的申明方式以及常用方法
数组的定义: 方法1. var mycars=new Array()mycars[0]="Saab"mycars[1]="Volvo"mycars[2]=&qu ...
- Druid.io系列(三): Druid集群节点
原文链接: https://blog.csdn.net/njpjsoftdev/article/details/52955937 1 Historical Node Historical Node的职 ...
- java实现心型、99乘法demo
package com.js.ai.modules.pointwall.interfac; import java.awt.Font; import javax.print.attribute.sta ...
- msyqld 的 The user specified as a definer ('root'@'%') does not exist 问题
msyqld 的 The user specified as a definer ('root'@'%') does not exist 问题 造成问题:搭建网站时显示内容不完整. 跟踪tomcat日 ...
- requests模块session处理cookie 与基于线程池的数据爬取
引入 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时,如果使用之前requests模块常规操作时,往往达不到我们想要的目的,例如: #!/usr/bin/ ...
- ArcGIS 二次开发增加工具栏按钮时,给按钮图标设置失败
在类的构造函数中通过下面的代码获得的bitmap为null: string bitmapResourceName = GetType().Name + ".bmp"; base.m ...
- AO Identify地图交互
转自supernever文章 Identify 1.框选要素高亮显示 private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS ...
- leetcode537
public class Solution { public string ComplexNumberMultiply(string a, string b) { var aryA = a.Split ...
- leetcode168
public class Solution { private string Convert(int k) { var s = ""; switch (k) { : s = &qu ...