2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 测试开发基础 | Python 算法与数据结构面试题系列一(附答案)

测试开发基础 | Python 算法与数据结构面试题系列一(附答案)

时间:2018-10-29 01:48:27

相关推荐

测试开发基础 | Python 算法与数据结构面试题系列一(附答案)

1.时间复杂度问题

已知 AList = [1, 2, 3],BSet = {1, 2, 3} (1)从AList和BSet中查找4,最坏时间复杂度哪个大?(2)从AList和BSet中插入4,最坏时间复杂度哪个大?

答:

1、对于查找,列表和集合的最坏时间复杂度都是O(n),所以一样的。

2、列表操作插入的最坏时间复杂度为o(n), 集合为o(1),所以Alist大。set是哈希表所以操作的复杂度基本上都是o(1)。

2.用 Python 实现一个二分查找的函数

答:

n = len(arr)left = 0right = n - 1while left <= right :mid = (left + right) // 2if arr[mid] < target:left = mid + 1elif arr[mid] > target:right = mid - 1else :print(f"index:{mid},value:{arr[mid]}")return Truereturn Falseif __name__ == '__main__':l = [1, 3, 4, 5, 6, 7, 8]binary_search(l, 8)

3.Python 单例模式的实现方法

答:

实现单例模式的方法有多种,之前再说元类的时候用 call 方法实现了一个单例模式,另外 Python 的模块就是一个天然的单例模式,这里我们使用 new 关键字来实现一个单例模式。

通过 new 函数实现简单的单例模式。

class Book:def __new__(cls, title):if not hasattr(cls, "_ins"):cls._ins = super().__new__(cls)print('in __new__')return cls._insdef __init__(self, title):print('in __init__')super().__init__()self.title = titleif __name__ == '__main__':b = Book('The Spider Book')b2 = Book('The Flask Book')print(id(b))print(id(b2))print(b.title)print(b2.title)

4.使用 Python 实现一个斐波那契数列

答:

斐波那契数列:数列从第3项开始,每一项都等于前两项之和。

def fibonacci(num):a, b = 0, 1l = [a, b]for i in range(num):a, b = b, a + bl.append(b)return lif __name__ == '__main__':print(fibonacci(10))

5.找出列表中的重复数字

答:

思路:从头扫到尾,只要当前元素值与下标不同,就做一次判断,numbers[i] 与 numbers[numbers[i]] 相等就认为找到了重复元素,返回 true;否则就交换两者,继续循环。直到最后还没找到认为没找到重复元素。

# -*- coding:utf-8 -*-class Solution:def duplicate(self, numbers):if numbers is None or len(numbers) <= 1:return Falseuse_set = set()duplication = {}for index, value in enumerate(numbers):if value not in use_set:use_set.add(value)else:duplication[index] = valuereturn duplicationif __name__ == '__main__':s = Solution()d = s.duplicate([1, 2, -3, 4, 4, 95, 95, 5, 2, 2, -3, 7, 7, 5])print(d)

6.找出列表中的单个数字

答:

def find_single(l :list):result = 0for v in l:result ^= vif result == 0:print("没有落单元素")else :print("落单元素", result)if __name__ == '__main__':l = [1, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6]find_single(l)

7.写一个冒泡排序

答:

def bubble_sort(arr):n = len(arr)for i in range(n - 1):for j in range(n - i - 1):.if arr[j] > arr[j + 1]:arr[j], arr[j + 1] = arr[j + 1], arr[j]if __name__ == '__main__':l = [1, 2, 3, 4, 5, 55, 6, 3, 4, 5, 6]bubble_sort(l)print(l)

写一个快速排序

答:

def quick_sort(arr, first, last):if first >= last:returnmid_value = arr[first]low = firsthigh = lastwhile low < high:while low < high and arr[high] >= mid_value:high -= 1 # 游标左移arr[low] = arr[high]while low < high and arr[low] < mid_value:low += 1arr[high] = arr[low]arr[low] = mid_valuequick_sort(arr, first, low - 1)quick_sort(arr, low + 1, last)if __name__ == '__main__':l = [1, 2, 3, 4, 5, 55, 6, 3, 4, 5, 6]quick_sort(l, 0, len(l) - 1)print(l)

写一个拓扑排序

答:

对应于该图的拓扑排序。每一个有向无环图都至少存在一种拓扑排序。

import pysnooperfrom typing import Mapping@pysnooper.snoop()def topological_sort(graph:Mapping):# in_degrees = {'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0, 'f': 0}in_degrees = dict((u, 0) for u in graph)for u in graph:for v in graph[u]: # 根据键找出值也就是下级节点in_degrees[v] += 1 # 对获取到的下级节点的入度加 1# 循环结束之后的结果: {'a': 0, 'b': 1, 'c': 1, 'd': 2, 'e': 1, 'f': 4}Q = [u for u in graph if in_degrees[u] == 0] # 入度为 0 的节点in_degrees_zero = []while Q:u = Q.pop() # 默认从最后一个移除in_degrees_zero.append(u) # 存储入度为 0 的节点for v in graph[u]:in_degrees[v] -= 1 # 删除入度为 0 的节点,以及移除其指向if in_degrees[v] == 0:Q.append(v)return in_degrees_zeroif __name__ == '__main__':# 用字典的键值表示图的节点之间的关系,键当前节点。值是后续节点。graph_dict = {'a': 'bf', # 表示 a 指向 b 和 f'b': 'cdf','c': 'd','d': 'ef','e': 'f','f': ''}t = topological_sort(graph_dict)print(t)

10.Python 实现一个二进制计算

答:

二进制加法

def binary_add(a:str, b: str):return bin(int(a, 2) + int(b, 2))[2:]if __name__ == '__main__':num1 = input("输入第一个数,二进制格式:\n")num2 = input("输入第二个数,二进制格式:\n")print(binary_add(num1, num2))

最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!

这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……

如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。

敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。

自学推荐B站视频:

零基础转行软件测试:38天自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!

自动化测试进阶:已上岸华为,涨薪20K,最适合自学的python自动化测试教程,自己花16800买的,无偿分享

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。