200 道算法面试题集锦!Python 实现,含华为、BAT 等校招真题!

简介: 200 道算法面试题集锦!Python 实现,含华为、BAT 等校招真题!

春招临近,无论是要找工作的准毕业生,还是身在职场想要提升自己的程序员,提升自己的算法内功心法、提升 Python 编程能力,总是大有裨益的。今天,红色石头发现了一份好资源:Python 实现的面试题集锦!


这份资源名为:Interview-code-practice-python!包含了几百道算法面试题,而且全都使用 Python 编写了答案。有问有答,学得岂不快哉~


好了,话不多说,直接放上这份面试集锦的 GitHub 地址:


https://github.com/leeguandong/Interview-code-practice-python


这个项目资源总共包含了 5 个方面的真题,分别是:2017 校招真题、剑指 offer、华为机试、机试题、直通 BAT 算法题。


image.png


接下来,我们分别来看一下具体内容。


1. 2017 校招真题


这部分包含了 37 道 2017 年的校招真题。


image.png


每个题目都配备相应的 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 道剑指真题。


image.png

请看示例:变态青蛙跳.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 道华为机试题。


image.png

请看示例:密码验证合格程序.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)
# 0
# 2
# 1
# 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 道机试题。


image.png

请看示例:排序.py


# https://blog.csdn.net/u012193416/article/details/78790448
# # 冒泡排序
# # 时间复杂度 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 算法题


这部分又包含三大块:


  • 二叉树
  • 栈和队列
  • 链表


我们来看一个示例:向有环的环形链表中插入新节点.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 面试题集锦对你有所帮助!

相关文章
|
2天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
17 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
24天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
241 55
|
12天前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
104 66
|
2月前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
146 67
|
2月前
|
存储 搜索推荐 Python
用 Python 实现快速排序算法。
快速排序的平均时间复杂度为$O(nlogn)$,空间复杂度为$O(logn)$。它在大多数情况下表现良好,但在某些特殊情况下可能会退化为最坏情况,时间复杂度为$O(n^2)$。你可以根据实际需求对代码进行调整和修改,或者尝试使用其他优化策略来提高快速排序的性能
132 61
|
2月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
123 63
|
1月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
168 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
9天前
|
算法 网络协议 Python
探秘Win11共享文件夹之Python网络通信算法实现
本文探讨了Win11共享文件夹背后的网络通信算法,重点介绍基于TCP的文件传输机制,并提供Python代码示例。Win11共享文件夹利用SMB协议实现局域网内的文件共享,通过TCP协议确保文件传输的完整性和可靠性。服务器端监听客户端连接请求,接收文件请求并分块发送文件内容;客户端则连接服务器、接收数据并保存为本地文件。文中通过Python代码详细展示了这一过程,帮助读者理解并优化文件共享系统。
|
14天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
46 5
|
14天前
|
存储 缓存 算法
探索企业文件管理软件:Python中的哈希表算法应用
企业文件管理软件依赖哈希表实现高效的数据管理和安全保障。哈希表通过键值映射,提供平均O(1)时间复杂度的快速访问,适用于海量文件处理。在Python中,字典类型基于哈希表实现,可用于管理文件元数据、缓存机制、版本控制及快速搜索等功能,极大提升工作效率和数据安全性。
51 0