python_编程面试题
使用递归方法对一个数组求最大值和最小值
"""
用递归算法求解一个数组的最大值和最小值
思路:
1、首先假设这个列表只有1个元素或两个元素
2、再考虑超过两个元素的情况,将该列表从中间位置一分为二
3、然后递归调用该函数
"""
def myMaxMin(L,start,end):
'''递归来得到数组的最大值和最小值'''
if end - start <= 1:#基准点的情况
return(max(L[start],L[end]),min(L[start],L[end]))
else:
max1, min1 = myMaxMin(L,start,(start+end)//2)#求前半部分的
max2, min2 = myMaxMin(L,(start+end)//2+1,end)#求后半部分的
return max(max1,max2),min(min1,min2) def maxMin(L):
assert(type(L) == type([]) and len(L) > 0)
maxV, minV = myMaxMin(L,0,len(L)-1)
print(maxV,minV)
return maxV, minV L = [1,3,5,6,7,8,5,7,8,-9]
assert(maxMin(L) == (8,-9))
使用递归的方法求出10个球的颜色可能性打印出来(颜色只有黑、白两种)
'''
有10个球,每个球有两种颜色选择,黑与白,使用递归的方法把这10个球的颜色可能性打印出来
1、将这10个球放入到一个列表中,全部用0表示,0表示白,1表示黑
2、找基准点(程序结束的条件)start = end,打印结果
'''
count = 0
def perm(L,start,end):
if start == end:#基准点,表示已经给每个球都赋值了一个颜色
print(L)
global count
count += 1
else:
perm(L,start+1,end)
L[start] = (L[start]+1)%2#实现1与0的互换
perm(L,start+1,end) L=[0,0,0,0,0,0,0,0,0,0]
res = perm(L,0,len(L))
print(count)#1024,2**10
使用两个栈实现一个队列
'''
使用两个栈实现一个队列
队列:a,b,c -->c,b,a
'''
class QueueWithStacks: def __init__(self):
self.s1 = []
self.s2 = [] def push(self,e):
self.s1.append(e) def pop(self):
if len(self.s2) == 0:
while len(self.s1) > 0:
t = self.s1.pop()
self.s2.append(t)
assert len(self.s2) > 0,'队列已经为空'#此时说明队列没有元素
return self.s2.pop() q = QueueWithStacks()
q.push('a')
q.push('b')
q.push('c')
print(q.pop())
print(q.pop())
print(q.pop())
print(q.pop())#AssertionError: 队列已经为空
实现单例模式
class Singleton:
__instance = None
@classmethod
def get_instance(cls):
if cls.__instance:
return cls.__instance
else:
cls.__instance = Singleton()
return cls.__instance
obj1 = Singleton.get_instance()
print(obj1) # <__main__.Singleton object at 0x7eff2ce22b70>
obj2 = Singleton.get_instance()
print(obj2) # <__main__.Singleton object at 0x7eff2ce22b70>
class Singleton(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls,'_instance'):
cls._instance = super(Singleton,cls).__new__(cls)
return cls._instance s1 = Singleton()
s2 = Singleton()
print(s1 == s2) # True
闭包
def foo():
return [lambda x: i+x for i in range(4)] print([x(3) for x in foo()]) # 将上面的程序改写,以便更好的理解
def foo():
function_list = []
for i in range(4):
function_list += [lambda x: i+x]
return function_list # 返回一个存有四个函数的列表 # x其实就是表示x=lambda x: i+x,所以x(3)就表示lambda 3: i+3,只不过此处用到了闭包的概念:i是foo函数的局部变量,x是foo的内嵌函数
# 内嵌函数引用外部函数的变量i,当foo函数执行完毕返回一个函数列表时,i的值已经是3了,所以当x函数中的i就是3,所以结果就是[3+3,3+3,3+3,3+3]
print([x(3) for x in foo()])
编译一个目录,找出该目录下的所有文件
import os
file_list = []
def traversal_directory(dir):
for child in os.listdir(dir):
parent_child = os.path.join(dir, child)
if os.path.isdir(parent_child):
traversal_directory(parent_child)
else:
file_list.append(parent_child)
return file_list if __name__ == "__main__":
for file in traversal_directory("slideshow"):
print(file)
is与==的区别
"""
==符号判断的是字面值
is判断的是对象的地址
==符号为True则用is判断也必定为True
is判断为True时用==符号判断未必是True
"""
class A:
@staticmethod
def __eq__(var):
return True
if __name__ == "__main__":
print(A() == 1) # True
print(A() is 1) # False
print("A()的id",id(A()))
print("1的id",id(1))
python与C语言在运行效率上哪个更快,并编写代码验证
求第45个斐波那契数
import time def fun(n):
if n <= 2:
return 1
return fun(n-1) + fun(n-2) start = time.time()
res = fun(45)
end = time.time()
tm = end - start
print(tm) # 287.7714354991913,大约5分钟
print(res)
#include <stdio.h>
#include <time.h>
#include <unistd.h> //导入sleep函数
long fib(int n){
if(n <= ){
return ;
}else{
return fib(n-) + fib(n-);
}
}
int main(){
unsigned long start = time();
long res = fib();
unsigned long end = time();
double time = end - start;
printf("time:%f\n",time); //大约5秒钟
printf("res:%ld\n", res);
return ;
}
python_编程面试题的更多相关文章
- C语言编程规范试题(标准答案)
C语言编程规范试题(标准答案) 一.单选题(每小题3分,共20小题60分) 1.1-1.5 B D A C B 1.6-1.10 C A D B C 1.11 ...
- C语言编程规范试题
C语言编程规范试题 [说明]: 1.本试题中不考虑头文件引用问题(假定已经包含正确的头文件),C语言的标准函数都可用: 2.如果不特别说明,假定程序运行环境为:操作系统Windows 2000, VC ...
- Java 并发编程面试题
并发编程面试题-内存模型说下内存模型定义为什么要有内存模型为什么要重排序,重排序在什么时候排如何约束重排序规则happens-before什么是顺序一致性CAS 实现的原理,是阻塞还是非阻塞方式?什么 ...
- C++ 高质量编程附录试题
附录B :C++/C试题 本试题仅用于考查C++/C程序员的基本编程技能.内容限于C++/C常用语法,不涉及数据结构.算法以及深奥的语法.考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不 ...
- Java并发编程面试题 Top 50 整理版
本文在 Java线程面试题 Top 50的基础上,对部分答案进行进行了整理和补充,问题答案主要来自<Java编程思想(第四版)>,<Java并发编程实战>和一些优秀的博客,当然 ...
- 合格linux运维人员必会的30道shell编程面试题及讲解
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1632876 超深度 ...
- (转)合格linux运维人员必会的30道shell编程面试题及讲解
超深度讲解shell高级编程实战,截至目前shell编程课程国内培训机构最细的课程,不信请看学员表现的水平. 课程牛不牛,不是看老师.课表,而是看培养的的学生水平,目前全免费中伙伴们赶紧看啊. htt ...
- Linux运维必会的实战编程笔试题(19题)
以下Linux运维笔试面试编程题,汇总整理自老男孩.马哥等培训机构,由运维派根据实战需求,略有调整: 企业面试题1:(生产实战案例):监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理 ...
- java网络编程面试题
1.网络编程时的同步.异步.阻塞.非阻塞? 同步:函数调用在没得到结果之前,没有调用结果,不返回任何结果.异步:函数调用在没得到结果之前,没有调用结果,返回状态信息.阻塞:函数调用在没得到结果之前,当 ...
随机推荐
- git .gitignore详解
1.最近使用git又遇到一个陷阱: 场景:A和B使用的不同的编译器做的同一个解决方案下的不同的项目工程,刚开始没考虑到版本问题,后来发现A上传的csproj在B需要做很麻烦修改才能打开,后来想到各自用 ...
- .NET进阶篇06-async异步、thread多线程1
知识需要不断积累.总结和沉淀,思考和写作是成长的催化剂 异步多线程挺大一块内容,既想拆开慢慢学,又想一股脑全倒出.纠结再三,还是拆开吃透,也不至于篇幅过长,劝退许多人 本篇先做一个概述,列明一些基本概 ...
- 「刷题」GERALD07加强版
是LCT了. 首先我们不知道联通块怎么数. 然后颓标签知道了是LCT. 那么考虑一下怎么LCT搞. 有一个很普遍的思路大家也应该都知道,就是如何求一个区间中某种颜色的个数. 这个可以很简单的用主席树来 ...
- 【转载】InstantRun 原理——深度剖析 AndroidStudio 2.0
一.前言 Android Studio 2.0开始支持 Instant Run 特性, 使得在开发过程中能快速将代码变化更新到设备上.之前,更新代码之后需要先编译一个完整的新Apk,卸载设备上已安装的 ...
- vue自定义长按指令
1.前言 在word中,当我们需要删除一大段文本的时候,我们按一下键盘上的退格键,就会删除一个字,当我们长按住退格键时,就会连续不停的删除,这就是键盘按键的长按功能.那么我们也想在网页中让一个按钮也具 ...
- [LLL邀请赛]参观路线(图论+dfs)
emmmm....学校的oj被查水表了,扒不到原题面,所以.... 但是我还是扒到了题面... 题目大意:给定一个完全图,删掉其中一些边,然后求其字典序最小的遍历顺序 有点像去年day2T1啊.... ...
- JSP——九大隐藏对象之四大域对象
你一定在你的Jsp文件中的监本片段中使用过以下九个对象的几种:out.config.page.pageContext.exception.request.response.application.se ...
- windows备份mysql数据库
1.编写执行文件mysql_backup.bat rem auther:ELSON ZENGrem date:20191104rem mysql backup! @echo off set mysql ...
- 水仙花数[js]
const getNarcissisticNumbers = function (n) { let min = Math.pow(10, n - 1) - 1 let max = Math.pow(1 ...
- AngularJS: Error reports on $injector:modulerr
Angular JS最常见的问题是,程序启动失败,error为$injector:modulerr 错误是因为加载对应的Module失败,但很难找到需要修改的Module. 一个简单的小技巧是,不要使 ...