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

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

好了,话不多说,平台不能放链接,可以直接去GitHub上搜,或者找我要也可以!

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

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

1. 2017 校招真题

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

每个题目都配备相应的 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 = 0
  14.  
  15. for i in range(n):
  16. # 盛放第 i 个可接受的顾客批 j
  17. temp = []
  18. # 注意 range 中要用 cus 的 length 时更新
  19. for j in range(len(cus)):
  20. if cus[j][0] > table[i]:
  21. break
  22. 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 道剑指真题。

请看示例:变态青蛙跳.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. 29ms
  14. 5632k
  15. '''
  16.  
  17. # -*- coding:utf-8 -*-
  18. class Solution:
  19. def jumpFloorII(self, number):
  20. # write code here
  21. return 2**(number-1)

3. 华为机试

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

请看示例:密码验证合格程序.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 sys
  21.  
  22. try:
  23. # 大小写,字母,
  24. def panchar(sss):
  25. standard = [0] * 4
  26. for i in sss:
  27. # print(i)
  28. #
  29. #
  30. #
  31. # A
  32. # b
  33. # print(len(sss))
  34. # 数字
  35. if i.isdigit():
  36. standard[0] = 1
  37. # print(i.isdigit())
  38. # 小写
  39. if i.islower():
  40. standard[1] = 1
  41. # 大写
  42. if i.isupper():
  43. standard[2] = 1
  44. # 全都是字母,数字,空格
  45. if not i.isalpha() and not i.isdigit() and not i.isspace():
  46. standard[3] = 1
  47. if sum(standard) >= 3:
  48. return False
  49. return True
  50.  
  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 True
  58. return False
  59.  
  60. result = []
  61. while True:
  62. line = sys.stdin.readline().strip()
  63. if line == '':
  64. break
  65. 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. pass
  78.  
  79. # # 循环输入,try catch
  80. # while True:
  81. # try:
  82. # x = input().split()
  83. #
  84. #
  85. # except:
  86. # pass

4. 机试题

这部分包含 3 道机试题。

请看示例:排序.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 x
  109. mid = length // 2
  110.  
  111. left = gbsort(x[:mid])
  112. right = gbsort(x[mid:])
  113.  
  114. left_point, right_pointer = 0, 0
  115. 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 += 1
  121. else:
  122. result.append(right_pointer)
  123. right_pointer += 1
  124.  
  125. result += left[left_point:]
  126. result += right[right_pointer]
  127.  
  128. return result
  129.  
  130. print(gbsort(x))

5. 直通 BAT 算法题

这部分又包含三大块:

  • 二叉树

  • 栈和队列

  • 链表

在学习Python的过程中,往往因为没有资料或者没人指导从而导致自己不想学下去了,因此我特意准备了个群 592539176 ,群里有大量的PDF书籍、教程都给大家免费使用!不管是学习到哪个阶段的小伙伴都可以获取到自己相对应的资料!

我们来看一个示例:向有环的环形链表中插入新节点.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 = node
  11. return node
  12. node = head
  13. pre = node
  14. cur = node.next
  15. while cur != head:
  16. if pre.value > num and cur.value <= num:
  17. break
  18. pre = pre.next
  19. cur = cur.next
  20. # num 小于节点值,pre只跑到最后一个节点,node跑道头结点
  21. pre.next = node
  22. node.next = cur
  23. # 是按顺序来的,返回的是 head 或者 node ,是有顺序决定的
  24. return head if head.value < num else node
  25.  
  26. node = Node()
  27. node.insertnum([[1, 2, 3], 5])

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

数百道BAT等大厂最新Python面试真题,学到你手软!的更多相关文章

  1. Python面试真题答案或案例

    Python面试真题答案或案例如下: 请等待. #coding=utf-8 #1.一行代码实现1--100之和 print(sum(range(1,101))) #2.如何在一个函数内部修改全局变量 ...

  2. python 面试真题

    0.Python是什么? Python是一种解释型语言.但是跟C和C的衍生语言不同,Python代码在运行之前不需要编译.其他解释型语言还包括PHP和Ruby. Python是动态类型语言,指的是在声 ...

  3. Python面试真题第一节

    1.一行代码实现1--100之和 2.如何在一个函数内部修改全局变量 3.列出5个python标准库 4.字典如何删除键和合并两个字典 5.谈下python的GIL 6.python实现列表去重的方法 ...

  4. Python面试真题第四节

    81.举例说明SQL注入和解决办法 82.s="info:xiaoZhang 33 shandong",用正则切分字符串输出['info', 'xiaoZhang', '33', ...

  5. Python面试真题第三节

    51.正则匹配,匹配日期2018-03-20 url='https://sycm.taobao.com/bda/tradinganaly/overview/get_summary.json?dateR ...

  6. Python面试真题第二节

    26.字符串a = "not 404 found 张三 99 深圳",每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三 深圳" 27.filter方法求 ...

  7. 秋招如何抱佛脚?2022最新大厂Java面试真题合集(附答案

    2022秋招眼看着就要来了,但是离谱的是,很多同学最近才想起来还有秋招这回事,所以纷纷临时抱佛脚,问我有没有什么快速磨枪的方法, 我的回答是:有! 说起来,临阵磨枪没有比背八股文更靠谱的了,很多人对这 ...

  8. 2018最新大厂Android面试真题

    前言 又到了金三银四的面试季,自己也不得不参与到这场战役中来,其实是从去年底就开始看,android的好机会确实不太多,但也还好,3年+的android开发经历还是有一些面试机会的,不过确实不像几年前 ...

  9. 大厂0距离:网易 Linux 运维工程师面试真题,内含答案

    作为 Linux 运维工程师,进入大公司是开启职业新起点的关键,今天马哥 linux 运维及云计算智囊团的小伙伴特别分享了其在网易面试 Linux 运维及云计算工程师的题目和经历,希望对广大 Linu ...

随机推荐

  1. 2019-9-26:渗透测试,基础学习,js正则以及什么是目录扫描,笔记

    js正则表达式,用单个字符串描述或者匹配符合特定语句规则的字符串,相当于一种搜索模式.一些字符序列组合在一起,可以简单也可以复杂模式的,可以去搜索还可以替换 正则表达式语法/表达式/修饰符(可选),例 ...

  2. 读完此文让你了解各个queue的原理

    队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作.通俗来讲,就是一个队列中,早来的排在前面,后来的就在队尾,而这个队列大多只有一个出口和入口的单项队列.Queue的重要 ...

  3. 在ensp上模拟企业网络场景并Access接口加入相应VLAN

    模拟的企业网络大概描述: 公司内网是一个大的局域网,二层交换机S1放置在一楼,在一楼办公的部门有IT部和人事部:二层交换机S2放置在二楼,在二楼办公的部门有市场部和研发部.由于交换机组成的是广播网,交 ...

  4. css优先级之important

    css优先级之important

  5. selenium常用命令之页面元素定位

    WebDriver driver= new ChromeDriver();   <input type="text" id="phone" name=&q ...

  6. For input string:"name"

    今天写项目的时候遇到了For input string:"name"这个错误,在控制台看报错信息好像是在说类型格式转换错误, 可是我并没有转换格式,这个name是我在jsp页面中使 ...

  7. svn+apache搭建版本控制服务器

    Centos7(linux)搭建版本控制服务器(svn+apache) 1.简介: 版本控制服务器: 版本控制(Revision control)是一种软体工程技巧,籍以在开发的过程中,确保由不同人所 ...

  8. 华为云 AI 实战营计划,带你迈上 AI 之路

    当今,AI的开发人才需求呈现极大的供需不平衡.所有开发者都关心,要如何从一名开发者晋升为AI开发者?AI开发能力,是主要的进入障碍.不用慌,华为云推出了 <华为云ModelArts-Lab AI ...

  9. 华为ARM64服务器上手体验--不吹不黑,用实际应用来看看TaiShan鲲鹏的表现

    背景 中美贸易冲突以来,相信最大的感受,并不是我对你加多少关税,而是我有,可我不卖给你."禁售"成了市场经济中最大的竞争力. 相信也是因为这个原因,华为"备胎转正&quo ...

  10. 【原创】004 | 搭上SpringBoot事务诡异事件分析专车

    前言 如果这是你第二次看到师长,说明你在觊觎我的美色! 点赞+关注再看,养成习惯 没别的意思,就是需要你的窥屏^_^ 本专车系列文章 目前连载到第四篇,本专题是深入讲解Springboot源码,毕竟是 ...