- 0
- 0
- 约8.4千字
- 约 27页
- 2026-01-19 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年IT技术专家的面试问题及答案
一、编程与算法(共5题,每题15分,总分75分)
题目1(15分):实现快速排序算法
请用Python实现快速排序算法,并分析其时间复杂度和空间复杂度。
答案:
python
defquick_sort(arr):
iflen(arr)=1:
returnarr
pivot=arr[len(arr)//2]
left=[xforxinarrifxpivot]
middle=[xforxinarrifx==pivot]
right=[xforxinarrifxpivot]
returnquick_sort(left)+middle+quick_sort(right)
时间复杂度:平均O(nlogn),最坏O(n^2)
空间复杂度:O(logn)(递归栈空间)
解析:
快速排序通过分治策略实现排序,选择一个基准值(pivot),将数组分为小于、等于、大于三个部分,然后递归排序左右两部分。时间复杂度取决于分区平衡性,平均情况下为O(nlogn),最坏情况(已排序数组选择中值)为O(n^2)。空间复杂度主要由递归栈决定,为O(logn)。
题目2(15分):设计一个LRU缓存
请用Python实现LRU(LeastRecentlyUsed)缓存,要求支持get和put操作,并说明你的实现思路。
答案:
python
classLRUCache:
def__init__(self,capacity:int):
self.capacity=capacity
self.cache={}
self.order=[]
defget(self,key:int)-int:
ifkeyinself.cache:
self.order.remove(key)
self.order.append(key)
returnself.cache[key]
return-1
defput(self,key:int,value:int)-None:
ifkeyinself.cache:
self.order.remove(key)
eliflen(self.cache)=self.capacity:
oldest=self.order.pop(0)
delself.cache[oldest]
self.cache[key]=value
self.order.append(key)
解析:
LRU缓存通过维护一个有序列表记录访问顺序,当访问某个元素时将其移到列表末尾,当需要添加新元素而容量已满时删除列表第一个元素(最久未使用)。Python中可以通过维护一个双向链表配合哈希表实现O(1)时间复杂度的LRU缓存,这里简化为维护一个列表记录访问顺序。
题目3(15分):实现二叉树的深度优先遍历
请用递归方式实现二叉树的深度优先遍历(前序、中序、后序),并说明差异。
答案:
python
classTreeNode:
def__init__(self,val=0,left=None,right=None):
self.val=val
self.left=left
self.right=right
前序遍历
defpreorderTraversal(root):
ifnotroot:
return[]
return[root.val]+preorderTraversal(root.left)+preorderTraversal(root.right)
中序遍历
definorderTraversal(root):
ifnotroot:
return[]
returninorderTraversal(root.left)+[root.val]+inorderTraversal(root.right)
后序遍历
defpostorderTraversal(root):
ifnotroot:
return[]
returnpostorderTraversal(root.left)+postorderTraversal(root.right)+[root.val]
解析:
三种遍历的主要区别在于访问根节点的时机:
-前序:访问根节点-遍历左子树-遍历右子树
-中序:遍历左子树-访问根节点-遍历右子树
-后序:遍历左子树-遍历右子树-访问根节点
实际应用中,中序遍历常用于二叉搜索树得到有序序列,前序遍历可用于复制树结
原创力文档

文档评论(0)