python一只青蛙一次可以_数百道BAT等大厂最新Python面试真题,学到你手软

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

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

2fb7d8131559c6e278f0960cca025360.png

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

1. 2017 校招真题

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

9d259c4d4dfb7e2f8201e155602035f1.png

每个题目都配备相应的 Python 实现。例如我们来看一个有趣的例子:餐厅.py

 1 # 在 m 批客人中选择 n 批上 n 个桌子 2 n, m = [int(x) for x in input().split()] 3 # 每个桌子可容纳的最大人数 4 table = [int(x) for x in input().split()] 5 # 分别表示第 i 批客人的人数和预计消费金额 6 cus = [[int(x) for x in input().split()] for i in range(m)] 7  8 # 将桌子按可容纳人数从小到大排列 9 table.sort()10 # 按每批顾客的人数从小到大排序11 cus = sorted(cus, key=lambda x: x[0])12 # 总金额13 money = 014 15 for i in range(n):16 # 盛放第 i 个可接受的顾客批 j17 temp = []18 # 注意 range 中要用 cus 的 length 时更新19 for j in range(len(cus)):20 if cus[j][0] > table[i]:21 break22 temp.append(cus[j])23 # 按消费金额排序24 temp = sorted(temp, key=lambda x: x[1])25 if temp:26 money += temp[-1][1]27 # 此批客人已就坐28 cus.remove()29 print(money)

2. 剑指 offer

这部分共包含了 68 道剑指真题。

4a1f6062f63b0c3ef291fef8793aae60.png

请看示例:变态青蛙跳.py

 1 ''' 2 题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法 3 ''' 4  5 ''' 6 因为n级台阶,第一步有n种跳法:跳1级、跳2级、到跳n级 7 跳1级,剩下n-1级,则剩下跳法是f(n-1) 8 跳2级,剩下n-2级,则剩下跳法是f(n-2) 9 所以f(n)=f(n-1)+f(n-2)+...+f(1)10 因为f(n-1)=f(n-2)+f(n-3)+...+f(1)11 所以f(n)=2*f(n-1)12 然后求解这个无穷级数的和,正确答案应该是:每次至少跳一个,至多跳n个,一共有f(n)=2n-1种跳法13 29ms14 5632k15 '''16 17 # -*- coding:utf-8 -*-18 class Solution:19 def jumpFloorII(self, number):20 # write code here21 return 2**(number-1)

3. 华为机试

这部分包含 41 道华为机试题。

9b75206b6202334ce098c4af30bc35e4.png

请看示例:密码验证合格程序.py

 1 ''' 2 1.长度超过8位 3 2.包括大小写字母.数字.其它符号,以上四种至少三种 4 3.不能有相同长度超2的子串重复 5 说明:长度超过2的子串 6 ''' 7  8 # import re, sys 9 #10 # for i in sys.stdin.readlines():11 # print("OK" if len(i.strip()) > 8 and sum(12 # [1 if re.search(r"[A-Z]", i.strip()) else 0, 1 if re.search(r"[a-z]", i.strip()) else 0,13 # 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(14 #         map(lambda c: i.strip().count(i.strip()[c:c + 3]) > 1, range(1, len(i.strip()) - 3))) == 0 else "NG")15 16 # 略微思考会发现,只需要判断长度为3的子串是否出现即可。因为假设子串长度为4的出现,则一定包括了长度为3的子串。同时需要注意,17 # 本题说的子串指包括了部分子串重叠的情况,18 # 例如Qw11111*ed这个是不能通过的。再就是需要注意,判断子串的时候只需要判断到len(str)-3就行了。19 20 import sys21 22 try:23 # 大小写,字母,24 def panchar(sss):25 standard = [0] * 426 for i in sss:27 # print(i)28 # 029 # 230 # 131 # A32 # b33 # print(len(sss))34 # 数字35 if i.isdigit():36 standard[0] = 137 # print(i.isdigit())38 # 小写39 if i.islower():40 standard[1] = 141 # 大写42 if i.isupper():43 standard[2] = 144 # 全都是字母,数字,空格45 if not i.isalpha() and not i.isdigit() and not i.isspace():46 standard[3] = 147 if sum(standard) >= 3:48 return False49 return True50 51 # 不能有相同长度超 2 的字串重复52 def zichuan(sss):53 for i in range(len(sss) - 3):54             zichuan_1 = sss[i: i + 3]55 zichuan_2 = sss[i + 1::]56 if zichuan_1 in zichuan_2:57 return True58 return False59 60 result = []61 while True:62 line = sys.stdin.readline().strip()63 if line == '':64 break65 if len(line) <= 8:66 result.append('NG')67 # 大小写字母.数字.其它符号68 elif panchar(line):69 result.append('NG')70 elif zichuan(line):71 result.append('NG')72 else:73 result.append('OK')74 for i in result:75 print(i)76 except:77 pass78 79 80 # # 循环输入,try catch81 # while True:82 #     try:83 # x = input().split()84 #85 #86 #     except:87 # pass

4. 机试题

这部分包含 3 道机试题。

ff49c6e553c1bdcbb39ff2a26216abb3.png

请看示例:排序.py

  1 # # 冒泡排序  2 # # 时间复杂度 O(n**2) 空间复杂度 O(1)  3 # x = [int(i) for i in input().split(',')]  4 #  5 # # print(x)  6 #  7 # def mpsort(x):  8 # n = len(x)  9 # # print(n) 10 # for i in range(n - 1): 11 # for j in range(0, n - i - 1): 12 # # print(x[j]) 13 # if x[j] > x[j + 1]: 14 # x[j], x[j + 1] = x[j + 1], x[j] 15 # return x 16 # 17 # print(mpsort(x)) 18  19 # # 选择排序 20 # # 时间复杂度 O(n**2) 空间复杂度 O(1) 21 # x = [int(i) for i in input().split(',')] 22 # 23 # def xzsort(x): 24 # n = len(x) 25 # for i in range(n - 1): 26 # min = i 27 # for j in range(i + 1, n): 28 # if x[j] < x[min]: 29 # min = j 30 # x[i], x[min] = x[min], x[i] 31 # return x 32 # 33 # print(xzsort(x)) 34  35 # # 插入排序 36 # # 时间复杂度 O(n**2) 空间复杂度 O(1) 37 # x = [int(i) for i in input().split(',')] 38 # 39 # def crsort(x): 40 # n = len(x) 41 # for i in range(1, n): 42 # j = i 43 # while j > 0: 44 # if x[j] < x[j - 1]: 45 # x[j], x[j - 1] = x[j - 1], x[j] 46 # j -= 1 47 # else: 48 # break 49 # return x 50 # 51 # print(crsort(x)) 52  53 # # 希尔排序 54 # # 时间复杂度 O(nlogn)-O(n**2) 空间复杂度 O(1) 55 # x = [int(i) for i in input().split(',')] 56 # 57 # def shellsort(x): 58 # n = len(x) 59 # gap = n // 2 60 # 61 # while gap > 0: 62 # for i in range(gap, n): 63 # j = i 64 # while j > 0: 65 # if x[j] < x[j - gap]: 66 # x[j], x[j - gap] = x[j - gap], x[j] 67 # j -= gap 68 # else: 69 # break 70 # gap //= 2 71 # return x 72 # 73 # print(shellsort(x)) 74  75 # # 快速排序 76 # # 时间复杂度 O(nlogn) 空间复杂度 O(logn)-O(n) 77 # x = [int(i) for i in input().split(',')] 78 # 79 # def kpsort(x, first, last): 80 # font = first 81 # end = last 82 # middle = x[first] 83 # 84 # if first >= last: 85 # return 86 # 87 # while font < end: 88 # while font < end and x[font] <= middle: 89 # font += 1 90 # x[end] = x[font] 91 # 92 # while font < end and x[end] > middle: 93 # end -= 1 94 # x[font] = x[end] 95 # 96 # x[font] = middle 97 # 98 # kpsort(x, first, font - 1) 99 # kpsort(x, font + 1, last)100 101 # 归并排序102 # 时间复杂度 O(nlogn) 空间复杂度 O(N)103 x = [int(i) for i in input().split(',')]104 105 def gbsort(x):106 length = len(x)107     if length <= 1:108 return x109 mid = length // 2110 111     left = gbsort(x[:mid])112     right = gbsort(x[mid:])113 114 left_point, right_pointer = 0, 0115 result = []116 117     while left_point < len(left) and right_pointer < len(right):118         if left[left_point] <= right[right_pointer]:119 result.append(left[left_point])120 left_point += 1121         else:122 result.append(right_pointer)123 right_pointer += 1124 125     result += left[left_point:]126 result += right[right_pointer]127 128 return result129 130 print(gbsort(x))

5. 直通 BAT 算法题

这部分又包含三大块:

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

我们来看一个示例:向有环的环形链表中插入新节点.py

 1 # 指针给的是节点值 2 class Node(): 3 def __init__(self, value=None): 4 self.value = value 5 self.next = None 6  7 def insertnum(head, num): 8 node = Node(num) 9 if head == None:10 node.next = node11 return node12 node = head13 pre = node14 cur = node.next15 while cur != head:16 if pre.value > num and cur.value <= num:17 break18 pre = pre.next19 cur = cur.next20 # num 小于节点值,pre只跑到最后一个节点,node跑道头结点21 pre.next = node22 node.next = cur23 # 是按顺序来的,返回的是 head 或者 node ,是有顺序决定的24 return head if head.value < num else node25 26 node = Node()27 node.insertnum([[1, 2, 3], 5])

一般学习 Python 的最好方法就是从底层算法开始实现一遍,过一遍基本函数与结构。有了充足的理解之后,就可以直接刷 LeetCode 等。希望这份 Python 面试题集锦对你有所帮助!

最后,小编想说:我是一名python开发工程师,整理了一套最新的python系统学习教程,想要这些资料的可以关注私信小编“01”即可,希望能对你有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值