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 ...
随机推荐
- jquery 操作单选按钮
<input type="radio" name="sex" value="男" />男 <input type=&quo ...
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料汇总 (上)
转载:http://dataunion.org/8463.html?utm_source=tuicool&utm_medium=referral <Brief History of Ma ...
- 通俗讲讲FPGA
通俗讲讲什么是FPGA. FPGA出现之前,所有集成电路都可以看成雕塑家,但是雕成一个成品,往往要浪费很多半成品和原料,这就是ASIC的制造. 后来FPGA出现了,FPGA就是块橡皮泥,什么硬件电路都 ...
- css loading 效果
.loading{ width:160px; height:56px; position: absolute; top:50%; left:50%; line-height:56px; color:# ...
- java web 程序---刷新页面次数进一步
<%@ page language="java" import="java.util.*" pageEncoding="gb2312" ...
- 04:Sysbench压测-innodb_flush_log_at_trx_commit,sync_binlog参数对性能的影响
目录 sysbench压测-innodb_flush_log_at_trx_commit,sync_binlog参数对性能的影响 一.OLTP测试前准备 二.MySQL 数据落盘的过程 三.参数说明 ...
- 文档主题生成模型(LDA)
一.问题描述 1.1文本建模相关 统计文本建模的目的其实很简单:就是估算一组参数,这组参数使得整个语料库出现的概率最大.这是很简单的极大似然的思想了,就是认为观测到的样本的概率是最大的.建模的目标也是 ...
- canvas之画一条线段
var canvas=document.getElementById("canvas"); //设置绘图环境 var cxt=canvas.getContext('2d'); // ...
- Docker学习总结(一)—— namespace,cgroup机制
1.namespace: Linux Namespaces机制提供一种资源隔离方案.PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace.每个 Namespace里 ...
- Ceph在OpenStack中的地位
对Ceph在OpenStack中的价值进行简要介绍,并且对Ceph和Swift进行对比. 对于一个IaaS系统,涉及到存储的部分主要是块存储服务模块.对象存储服务模块.镜像管理模块和计算服务模块.具体 ...