使用递归方法对一个数组求最大值和最小值

"""
用递归算法求解一个数组的最大值和最小值
思路:
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_编程面试题的更多相关文章

  1. 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 ...

  2. C语言编程规范试题

    C语言编程规范试题 [说明]: 1.本试题中不考虑头文件引用问题(假定已经包含正确的头文件),C语言的标准函数都可用: 2.如果不特别说明,假定程序运行环境为:操作系统Windows 2000, VC ...

  3. Java 并发编程面试题

    并发编程面试题-内存模型说下内存模型定义为什么要有内存模型为什么要重排序,重排序在什么时候排如何约束重排序规则happens-before什么是顺序一致性CAS 实现的原理,是阻塞还是非阻塞方式?什么 ...

  4. C++ 高质量编程附录试题

    附录B :C++/C试题 本试题仅用于考查C++/C程序员的基本编程技能.内容限于C++/C常用语法,不涉及数据结构.算法以及深奥的语法.考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不 ...

  5. Java并发编程面试题 Top 50 整理版

    本文在 Java线程面试题 Top 50的基础上,对部分答案进行进行了整理和补充,问题答案主要来自<Java编程思想(第四版)>,<Java并发编程实战>和一些优秀的博客,当然 ...

  6. 合格linux运维人员必会的30道shell编程面试题及讲解

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1632876 超深度 ...

  7. (转)合格linux运维人员必会的30道shell编程面试题及讲解

    超深度讲解shell高级编程实战,截至目前shell编程课程国内培训机构最细的课程,不信请看学员表现的水平. 课程牛不牛,不是看老师.课表,而是看培养的的学生水平,目前全免费中伙伴们赶紧看啊. htt ...

  8. Linux运维必会的实战编程笔试题(19题)

    以下Linux运维笔试面试编程题,汇总整理自老男孩.马哥等培训机构,由运维派根据实战需求,略有调整: 企业面试题1:(生产实战案例):监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理 ...

  9. java网络编程面试题

    1.网络编程时的同步.异步.阻塞.非阻塞? 同步:函数调用在没得到结果之前,没有调用结果,不返回任何结果.异步:函数调用在没得到结果之前,没有调用结果,返回状态信息.阻塞:函数调用在没得到结果之前,当 ...

随机推荐

  1. 在虚拟机上的关于Apache(阿帕奇)(5)基于端口访问网站

    这篇随笔是基于端口访问网站,和前面两篇文章基于ip和基于域名一起练习效果更好 接下来分别创建三个网站数据目录 输入命令: mkdir  -p  /home/wwwroot/{8001,8002,800 ...

  2. MySQL字符集与排序规则总结

      字符集与排序规则概念 在数据库当中都有字符集和排序规则的概念, 很多开发人员甚至包括有些DBA都会将这个混淆,当然这个情况也有一些情有可原的原因.一来两者本来就是相辅相成,相互依赖关联: 另外一方 ...

  3. 和35岁刘阿姨一起自测 Python 流程控制基本功

    0.突然降临的困惑 流程控制语句.布尔值.布尔值操作符都属于 python 的基础功.大好周末我写这篇笔记,不是为了整理这些基础知识点,而是记录几个令我突然迷惑的代码段.--代码本身很简单,但即便已经 ...

  4. 清华大学教学内核ucore学习系列(1) bootloader

    ucore是清华大学操作系统课程的实验内核,也是一个开源项目,是不可多得的非常好的操作系统学习资源 https://github.com/chyyuu/ucore_lab.git, 各位同学可以使用g ...

  5. nginx篇高级用法之基于TCP/UDP的四层调度

    nginx 从1.9版本开始支持基于TCP/UDP的四层调度,在编译nginx时使用--with-stream开启该模块 支持TCP/UDP调度时,支持给所有的软件做调度器,例如:nfs smb ft ...

  6. csp模拟69

    考试一眼看出$T3$原题,但是没做过,心态爆炸. 然后去看$T1$,迷之认为它是矩阵快速幂?推了一个小时,发现在转移过程中方案数并不均匀分布,然后就挂了. 决定先去看T3,只会$O(n\sqrt{n} ...

  7. Spring Cloud gateway 五 Sentinel整合

    微服务当前这么火爆的程度,如果不能学会一种微服务框架技术.怎么能升职加薪,增加简历的筹码?spring cloud 和 Dubbo 需要单独学习.说没有时间?没有精力?要学俩个框架?而Spring C ...

  8. echarts动态刷新数据

    在这次的项目中图表显示的部分比较多,这边给分享下用到的图表的数据刷新 饼图最后的效果 先看下 前端部分 <div div style="height: 40%; width: 17.5 ...

  9. 如何把链表以k个结点为一组进行翻转

    [MT笔试题] 题目描述: K 链表翻转是指把每K个相邻的结点看成一组进行翻转,如果剩余结点不足 K 个,则保持不变.假设给定链表 1 -> 2 -> 3 -> 4 -> 5 ...

  10. jade 学习笔记 - gulp 自动编译

    实时监控   jade -P -w .\test1.jade sublime 分栏,可以看到实时修改情况     1. 元素写法 doctype html <!--[if IE8]>< ...