python面试题,求两个List各个元素相减绝对值最小是多少
来源:互联网 发布:软件的缺陷等级 编辑:程序博客网 时间:2024/06/02 14:46
春暖花开,人心浮动,吾思当左迁之,一则工资上涨,二则环境变好。奈何世道不然,吹牛空谈者大受欢迎,而吾实事求是者则落寞如此,知之为知之,不知为不知。
投递无数,才得一二,某国有电信公司邀请面试,始记得吾曾于去年三月去过,现复一年又至三月,碰运气吧!
约至午后两点,前台等候,看人群左左右右的通过,心烦意乱,约莫两刻过去了,方使有人慢悠悠的过来,询问情况。领至一室,面窗而座,春日阳光甚毒,心烦更甚,看面前之人实是公司无要职之人,来应付我罢了。
一白纸,一枝笔,写一算法,求两组各值相减的绝对最小值 。怒已,吾实乃无急智之人,左右思之,不得头绪,只得推说不会。来人讲:
你就不会写个双重循环吗?
今得空闲,思之,将我的算法公之于众。
双重循环确实是最简单的,但大家都知道双重循环是最耗时间和CPU的,10*10、100*100、1000*1000都没有什么问题,但当你10000*10000时问题就来了,1亿次的循环,够呛的了。
现在把双重循环和我的算法贴出来,请同学们过目,指出可以改进的地方
算下来,当10000*10000时,双重循环用时大概N0秒左右 ,看你的计算机性能了。而我写的是做了20000次的循环,大概1秒多点,跟1亿次时间上差距很大。
#utf-coding:utf-8import randomimport datetime#随机两个包含1万个元素的listlist1,list2 = [],[]for x in range(10000): a = random.randint(-99999999999,99999999999) if a not in list1: list1.append(a)for x in range(10000): a = random.randint(-99999999999,99999999999) if a not in list2 and a not in list1: list2.append(a)#打印开始时间,这是第一种方法,采用传统的双循环的处理方法,10000^2就是一个亿啊print "第一种方法\n",str(datetime.datetime.now())min = float("inf") #设置min为无限大for i in list1: #双循环开始 for j in list2: # print abs(i-j) if abs(i-j) < min: min = abs(i-j)print min,"\n",str(datetime.datetime.now()),"\n" #打印结束时间#打印开始时间。第二种方法,我的方法,基本思路是双循环变单循环,两个10000就是20000#使用python内建函数 ,无论在什么时候,python的内建函数绝对比你的方法快print "第二种方法\n", str(datetime.datetime.now())min = float("inf")#两个list合并,去重,看看长度是否减小,如果有减小,就证明了一件事,两个list中有元素相同,这两个元素相减绝对等于0list3 = list(set(list1+list2))if len(list3) != len(list1+list2): min = 0else: #将合并后的list排序 list3.sort() for i in range(len(list3)-1): #已经排序了,我们只需要让后一个减前一个,然后再保证这两个数据原来不是在相同的list中即可 if abs(list3[i+1]-list3[i]) <min and \ (list3[i+1] in list1 or list3[i] in list1 )\ and (list3[i+1] in list2 or list3[i] in list2): min = abs(list3[i+1]-list3[i])print min,"\n",str(datetime.datetime.now()),"\n"
主要是and条件不好解决,我查了些资料,没有发现python的xor,不知道到底有没有
后记,Intel的U系列CPU果然性能差,随机值的大小也能影响到速度。借同学的至强E5服务器,15秒双循环就完成了。而我写的不到0.1秒
0 0
- python面试题,求两个List各个元素相减绝对值最小是多少
- 百度面试题:求一个已排序的数组中绝对值最小的元素
- 百度面试题:求一个已排序的数组中绝对值最小的元素
- 百度面试题:从已排序的数组中求绝对值最小的元素
- [经典面试题]排序数组中绝对值最小元素
- 面试题81:有序数组中绝对值最小的元素
- 百度面试题:求绝对值最小的数
- 百度面试题:求绝对值最小的数
- 百度面试题:求绝对值最小的数
- 百度面试题:求绝对值最小的数
- 百度面试题:求绝对值最小的数
- 数据结构面试题总结3——数组:求数组中两个元素的最小距离
- 求数组中绝对值最小的元素
- 面试题31:数组中的最小绝对值
- [面试题] 求数组两两之差绝对值最小的值
- 【转】[面试题] 求数组两两之差绝对值最小的值
- 【谷歌面试题】求数组中两个元素的最小距离
- 求两个有序数组中,各个元素的c差值最小
- iOS多线程理解告别生硬
- 2016数据库技术盘点
- C#开发ActiveX控件并应用于网页
- 在嵌入式开发板上执行应用程序时出现/bin/sh: ./XXX :Permission denied 错误的解决方法
- 使用write()函数和printf()函数输出一个字符串到终端
- python面试题,求两个List各个元素相减绝对值最小是多少
- Android代码混淆之混淆规则
- Apple 离线开发文档下载
- Ogre2.1 Hlms与渲染流程
- oracle的存储过程实现字段类型的替换
- PHP支持断点续传,分块下载的类
- FragmentTabHost的简单使用
- perl JMX::Jmx4Perl::Manual 说明
- 微信小程序入门之构建一个简单TODOS应用