数百道BAT等大厂最新Python面试真题,学到你手软!
春招临近,无论是要找工作的准毕业生,还是身在职场想要提升自己的程序员,提升自己的算法内功心法、提升 Python 编程能力,总是大有裨益的。今天,小编发现了一份好资源:Python 实现的面试题集锦!
这份资源名为:Interview-code-practice-python!包含了几百道算法面试题,而且全都使用 Python 编写了答案。有问有答,学得岂不快哉~
好了,话不多说,平台不能放链接,可以直接去GitHub上搜,或者找我要也可以!
这个项目资源总共包含了 5 个方面的真题,分别是:2017 校招真题、剑指 offer、华为机试、机试题、直通 BAT 算法题。
接下来,我们分别来看一下具体内容。
1. 2017 校招真题
这部分包含了 37 道 2017 年的校招真题。
每个题目都配备相应的 Python 实现。例如我们来看一个有趣的例子:餐厅.py
# 在 m 批客人中选择 n 批上 n 个桌子
n, m = [int(x) for x in input().split()]
# 每个桌子可容纳的最大人数
table = [int(x) for x in input().split()]
# 分别表示第 i 批客人的人数和预计消费金额
cus = [[int(x) for x in input().split()] for i in range(m)] # 将桌子按可容纳人数从小到大排列
table.sort()
# 按每批顾客的人数从小到大排序
cus = sorted(cus, key=lambda x: x[0])
# 总金额
money = 0 for i in range(n):
# 盛放第 i 个可接受的顾客批 j
temp = []
# 注意 range 中要用 cus 的 length 时更新
for j in range(len(cus)):
if cus[j][0] > table[i]:
break
temp.append(cus[j])
# 按消费金额排序
temp = sorted(temp, key=lambda x: x[1])
if temp:
money += temp[-1][1]
# 此批客人已就坐
cus.remove()
print(money)
2. 剑指 offer
这部分共包含了 68 道剑指真题。
请看示例:变态青蛙跳.py
'''
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法
''' '''
因为n级台阶,第一步有n种跳法:跳1级、跳2级、到跳n级
跳1级,剩下n-1级,则剩下跳法是f(n-1)
跳2级,剩下n-2级,则剩下跳法是f(n-2)
所以f(n)=f(n-1)+f(n-2)+...+f(1)
因为f(n-1)=f(n-2)+f(n-3)+...+f(1)
所以f(n)=2*f(n-1)
然后求解这个无穷级数的和,正确答案应该是:每次至少跳一个,至多跳n个,一共有f(n)=2n-1种跳法
29ms
5632k
''' # -*- coding:utf-8 -*-
class Solution:
def jumpFloorII(self, number):
# write code here
return 2**(number-1)
3. 华为机试
这部分包含 41 道华为机试题。
请看示例:密码验证合格程序.py
'''
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
说明:长度超过2的子串
''' # import re, sys
#
# for i in sys.stdin.readlines():
# print("OK" if len(i.strip()) > 8 and sum(
# [1 if re.search(r"[A-Z]", i.strip()) else 0, 1 if re.search(r"[a-z]", i.strip()) else 0,
# 1 if re.search(r"[0-9]", i.strip()) else 0, 1 if re.search(r"[^0-9a-zA-Z]", i.strip()) else 0]) > 2 and sum(
# map(lambda c: i.strip().count(i.strip()[c:c + 3]) > 1, range(1, len(i.strip()) - 3))) == 0 else "NG") # 略微思考会发现,只需要判断长度为3的子串是否出现即可。因为假设子串长度为4的出现,则一定包括了长度为3的子串。同时需要注意,
# 本题说的子串指包括了部分子串重叠的情况,
# 例如Qw11111*ed这个是不能通过的。再就是需要注意,判断子串的时候只需要判断到len(str)-3就行了。 import sys try:
# 大小写,字母,
def panchar(sss):
standard = [0] * 4
for i in sss:
# print(i)
#
#
#
# A
# b
# print(len(sss))
# 数字
if i.isdigit():
standard[0] = 1
# print(i.isdigit())
# 小写
if i.islower():
standard[1] = 1
# 大写
if i.isupper():
standard[2] = 1
# 全都是字母,数字,空格
if not i.isalpha() and not i.isdigit() and not i.isspace():
standard[3] = 1
if sum(standard) >= 3:
return False
return True # 不能有相同长度超 2 的字串重复
def zichuan(sss):
for i in range(len(sss) - 3):
zichuan_1 = sss[i: i + 3]
zichuan_2 = sss[i + 1::]
if zichuan_1 in zichuan_2:
return True
return False result = []
while True:
line = sys.stdin.readline().strip()
if line == '':
break
if len(line) <= 8:
result.append('NG')
# 大小写字母.数字.其它符号
elif panchar(line):
result.append('NG')
elif zichuan(line):
result.append('NG')
else:
result.append('OK')
for i in result:
print(i)
except:
pass # # 循环输入,try catch
# while True:
# try:
# x = input().split()
#
#
# except:
# pass
4. 机试题
这部分包含 3 道机试题。
![](https://upload-images.jianshu.io/upload_images/12778909-3ed26229cb0f89c4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
请看示例:排序.py
# # 冒泡排序
# # 时间复杂度 O(n**2) 空间复杂度 O(1)
# x = [int(i) for i in input().split(',')]
#
# # print(x)
#
# def mpsort(x):
# n = len(x)
# # print(n)
# for i in range(n - 1):
# for j in range(0, n - i - 1):
# # print(x[j])
# if x[j] > x[j + 1]:
# x[j], x[j + 1] = x[j + 1], x[j]
# return x
#
# print(mpsort(x)) # # 选择排序
# # 时间复杂度 O(n**2) 空间复杂度 O(1)
# x = [int(i) for i in input().split(',')]
#
# def xzsort(x):
# n = len(x)
# for i in range(n - 1):
# min = i
# for j in range(i + 1, n):
# if x[j] < x[min]:
# min = j
# x[i], x[min] = x[min], x[i]
# return x
#
# print(xzsort(x)) # # 插入排序
# # 时间复杂度 O(n**2) 空间复杂度 O(1)
# x = [int(i) for i in input().split(',')]
#
# def crsort(x):
# n = len(x)
# for i in range(1, n):
# j = i
# while j > 0:
# if x[j] < x[j - 1]:
# x[j], x[j - 1] = x[j - 1], x[j]
# j -= 1
# else:
# break
# return x
#
# print(crsort(x)) # # 希尔排序
# # 时间复杂度 O(nlogn)-O(n**2) 空间复杂度 O(1)
# x = [int(i) for i in input().split(',')]
#
# def shellsort(x):
# n = len(x)
# gap = n // 2
#
# while gap > 0:
# for i in range(gap, n):
# j = i
# while j > 0:
# if x[j] < x[j - gap]:
# x[j], x[j - gap] = x[j - gap], x[j]
# j -= gap
# else:
# break
# gap //= 2
# return x
#
# print(shellsort(x)) # # 快速排序
# # 时间复杂度 O(nlogn) 空间复杂度 O(logn)-O(n)
# x = [int(i) for i in input().split(',')]
#
# def kpsort(x, first, last):
# font = first
# end = last
# middle = x[first]
#
# if first >= last:
# return
#
# while font < end:
# while font < end and x[font] <= middle:
# font += 1
# x[end] = x[font]
#
# while font < end and x[end] > middle:
# end -= 1
# x[font] = x[end]
#
# x[font] = middle
#
# kpsort(x, first, font - 1)
# kpsort(x, font + 1, last) # 归并排序
# 时间复杂度 O(nlogn) 空间复杂度 O(N)
x = [int(i) for i in input().split(',')] def gbsort(x):
length = len(x)
if length <= 1:
return x
mid = length // 2 left = gbsort(x[:mid])
right = gbsort(x[mid:]) left_point, right_pointer = 0, 0
result = [] while left_point < len(left) and right_pointer < len(right):
if left[left_point] <= right[right_pointer]:
result.append(left[left_point])
left_point += 1
else:
result.append(right_pointer)
right_pointer += 1 result += left[left_point:]
result += right[right_pointer] return result print(gbsort(x))
5. 直通 BAT 算法题
这部分又包含三大块:
二叉树
栈和队列
链表
在学习Python的过程中,往往因为没有资料或者没人指导从而导致自己不想学下去了,因此我特意准备了个群 592539176 ,群里有大量的PDF书籍、教程都给大家免费使用!不管是学习到哪个阶段的小伙伴都可以获取到自己相对应的资料!
我们来看一个示例:向有环的环形链表中插入新节点.py
# 指针给的是节点值
class Node():
def __init__(self, value=None):
self.value = value
self.next = None def insertnum(head, num):
node = Node(num)
if head == None:
node.next = node
return node
node = head
pre = node
cur = node.next
while cur != head:
if pre.value > num and cur.value <= num:
break
pre = pre.next
cur = cur.next
# num 小于节点值,pre只跑到最后一个节点,node跑道头结点
pre.next = node
node.next = cur
# 是按顺序来的,返回的是 head 或者 node ,是有顺序决定的
return head if head.value < num else node node = Node()
node.insertnum([[1, 2, 3], 5])
最后,一般学习 Python 的最好方法就是从底层算法开始实现一遍,过一遍基本函数与结构。有了充足的理解之后,就可以直接刷 LeetCode 等。希望这份 Python 面试题集锦对你有所帮助!
数百道BAT等大厂最新Python面试真题,学到你手软!的更多相关文章
- Python面试真题答案或案例
Python面试真题答案或案例如下: 请等待. #coding=utf-8 #1.一行代码实现1--100之和 print(sum(range(1,101))) #2.如何在一个函数内部修改全局变量 ...
- python 面试真题
0.Python是什么? Python是一种解释型语言.但是跟C和C的衍生语言不同,Python代码在运行之前不需要编译.其他解释型语言还包括PHP和Ruby. Python是动态类型语言,指的是在声 ...
- Python面试真题第一节
1.一行代码实现1--100之和 2.如何在一个函数内部修改全局变量 3.列出5个python标准库 4.字典如何删除键和合并两个字典 5.谈下python的GIL 6.python实现列表去重的方法 ...
- Python面试真题第四节
81.举例说明SQL注入和解决办法 82.s="info:xiaoZhang 33 shandong",用正则切分字符串输出['info', 'xiaoZhang', '33', ...
- Python面试真题第三节
51.正则匹配,匹配日期2018-03-20 url='https://sycm.taobao.com/bda/tradinganaly/overview/get_summary.json?dateR ...
- Python面试真题第二节
26.字符串a = "not 404 found 张三 99 深圳",每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三 深圳" 27.filter方法求 ...
- 秋招如何抱佛脚?2022最新大厂Java面试真题合集(附答案
2022秋招眼看着就要来了,但是离谱的是,很多同学最近才想起来还有秋招这回事,所以纷纷临时抱佛脚,问我有没有什么快速磨枪的方法, 我的回答是:有! 说起来,临阵磨枪没有比背八股文更靠谱的了,很多人对这 ...
- 2018最新大厂Android面试真题
前言 又到了金三银四的面试季,自己也不得不参与到这场战役中来,其实是从去年底就开始看,android的好机会确实不太多,但也还好,3年+的android开发经历还是有一些面试机会的,不过确实不像几年前 ...
- 大厂0距离:网易 Linux 运维工程师面试真题,内含答案
作为 Linux 运维工程师,进入大公司是开启职业新起点的关键,今天马哥 linux 运维及云计算智囊团的小伙伴特别分享了其在网易面试 Linux 运维及云计算工程师的题目和经历,希望对广大 Linu ...
随机推荐
- 新闻实时分析系统 Spark2.X环境准备、编译部署及运行
1.Spark概述 Spark 是一个用来实现快速而通用的集群计算的平台. 在速度方面, Spark 扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理 ...
- 2019牛客暑期多校训练营(第九场) E All men are brothers
传送门 知识点:并查集+组合数学 并查集合并操作可以理解为使得两个集合的人互相成为朋友,也就是两个集合并在了一起,答案是要求从所有人中挑出四个互相不是朋友的四个人,比较基础的组合数学知识,但因为每个集 ...
- c#-PropertyChangingEventArgs
MSDN 解释连接:https://msdn.microsoft.com/zh-cn/library/system.eventargs.aspx#inheritanceContinued[Serial ...
- 基于 HTML5 + WebGL 的太阳系 3D 展示系统
前言 近年来随着引力波的发现.黑洞照片的拍摄.火星上存在水的证据发现等科学上的突破,以及文学影视作品中诸如<三体>.<流浪地球>.<星际穿越>等的传播普及,宇宙空间 ...
- 通过Python将Excel表格信息导入数据库
前言 公司原采用Excel表格方式记录着服务器资产信息,随着业务的增加,相应的硬件资产也增加,同时物理机虚拟化出多台虚拟机,存在表格管理杂乱.变更资产信息不能及时相互同步, 为了紧跟时代的步伐,老大搞 ...
- PowerMock学习(十)之Mock spy的使用
前言 回顾下之前学过的内容,会发现一点,如果在mock后不写when和thenReturn去指定,即便是mock调用任何方法,什么也不会做,也看不到什么效果. 划重点的时候来了,本身mock出来的对象 ...
- Batch Normalization详解
目录 动机 单层视角 多层视角 什么是Batch Normalization Batch Normalization的反向传播 Batch Normalization的预测阶段 Batch Norma ...
- mysql 中文不显示问题
MySQL的字符集支持(Character Set Support)有两个方面: 字符集(Character set)和排序方式(Collation).对于字符集的支持细化到四个层次: 服务器(ser ...
- 如何在导航条的button点击变换时,切换对应的控制器
1.导航条内的button被点击 切换对应的控制器 让控制器作为调航条的代理 1.定义代理 2.遵循代理协议 3.实现代理 4.在合适的地方调用代理 当按钮被点击的时候切换控制器
- redis与memcached区别
不同点: (1) redis中并不是所有数据在有效期内只能常驻内存的(如果需要,可定期同步持久化到磁盘),这是和memcached相比一个最大的区别(memcached中的数据在有效期内是以键值对的形 ...