您当前的位置: 首页 >  Python

轻松学Python

暂无认证

  • 0浏览

    0关注

    317博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

数百道BAT等大厂最新Python面试真题,学到你手软!

轻松学Python 发布时间:2019-12-19 16:35:43 ,浏览量:0

春招临近,无论是要找工作的准毕业生,还是身在职场想要提升自己的程序员,提升自己的算法内功心法、提升 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)
# 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)  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:
# 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             
关注
打赏
1663832040
查看更多评论
0.0381s