版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年软件开发面试试题集一、编程实现题(共3题,每题20分)1.题1(20分):实现一个简单的LRU缓存机制题目描述:设计一个LRU(LeastRecentlyUsed)缓存机制,支持以下操作:-`LRU(intcapacity)`:初始化缓存容量为`capacity`-`get(key)`:返回键`key`对应的值,如果不存在返回-1-`put(key,value)`:将键值对插入缓存,如果缓存已满,则移除最久未使用的项要求:-使用Python或Java实现-时间复杂度:`get`和`put`操作均为O(1)-可以使用哈希表和双向链表结合的方式实现示例:pythonclassLRUCache:def__init__(self,capacity:int):passdefget(self,key:int)->int:passdefput(self,key:int,value:int)->None:pass示例测试cache=LRUCache(2)cache.put(1,1)cache.put(2,2)print(cache.get(1))#返回1cache.put(3,3)#去除键2print(cache.get(2))#返回-1cache.put(4,4)#去除键1print(cache.get(1))#返回-1print(cache.get(3))#返回3print(cache.get(4))#返回42.题2(20分):实现一个字符串的URL化(URLify)题目描述:给定一个字符串`s`,其中包含空格,将所有空格替换为`%20`。假设字符串的末尾有足够的空间存储额外的字符。要求:-不能使用额外的库函数-时间复杂度:O(n)-空间复杂度:O(1)(不计算输出空间)示例:pythondefurlify(s:str,length:int)->str:pass示例测试s="MrJohnSmith"length=13print(urlify(s,length))#输出"Mr%20John%20Smith"3.题3(20分):实现一个二叉树的深度优先遍历(前序、中序、后序)题目描述:给定一个二叉树,分别实现其前序、中序和后序遍历。要求:-使用递归和迭代两种方式实现-可以使用Python或Java实现示例:python二叉树节点定义classTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=right示例二叉树1/\23/\45root=TreeNode(1)root.left=TreeNode(2)root.right=TreeNode(3)root.left.left=TreeNode(4)root.left.right=TreeNode(5)前序遍历(递归)defpreorder_recursive(root):pass前序遍历(迭代)defpreorder_iterative(root):pass中序遍历(递归)definorder_recursive(root):pass中序遍历(迭代)definorder_iterative(root):pass后序遍历(递归)defpostorder_recursive(root):pass后序遍历(迭代)defpostorder_iterative(root):pass测试print("前序递归:",preorder_recursive(root))#输出[1,2,4,5,3]print("前序迭代:",preorder_iterative(root))#输出[1,2,4,5,3]print("中序递归:",inorder_recursive(root))#输出[4,2,5,1,3]print("中序迭代:",inorder_iterative(root))#输出[4,2,5,1,3]print("后序递归:",postorder_recursive(root))#输出[4,5,2,3,1]print("后序迭代:",postorder_iterative(root))#输出[4,5,2,3,1]二、算法与数据结构题(共5题,每题16分)1.题4(16分):合并两个有序链表题目描述:合并两个单链表,使得合并后的链表仍然有序。要求:-不能使用额外的空间-时间复杂度:O(m+n),其中m和n分别是两个链表的长度示例:python链表节点定义classListNode:def__init__(self,val=0,next=None):self.val=valself.next=next示例链表链表1:1->2->4链表2:1->3->4合并后:1->1->2->3->4->4defmergeTwoLists(l1:ListNode,l2:ListNode)->ListNode:pass2.题5(16分):实现快速排序(QuickSort)题目描述:给定一个数组,使用快速排序算法对其进行排序。要求:-使用递归实现-时间复杂度:平均O(nlogn),最坏O(n^2)-空间复杂度:O(logn)示例:pythondefquick_sort(arr:list)->list:pass示例测试arr=[10,7,8,9,1,5]print(quick_sort(arr))#输出[1,5,7,8,9,10]3.题6(16分):实现二分查找(BinarySearch)题目描述:给定一个有序数组和一个目标值,返回目标值在数组中的索引。如果不存在,返回-1。要求:-时间复杂度:O(logn)-可以使用递归或迭代实现示例:pythondefbinary_search(arr:list,target:int)->int:pass示例测试arr=[1,2,3,4,5,6,7]target=4print(binary_search(arr,target))#输出3target=8print(binary_search(arr,target))#输出-14.题7(16分):实现堆排序(HeapSort)题目描述:给定一个数组,使用堆排序算法对其进行排序。要求:-可以使用最大堆或最小堆实现-时间复杂度:O(nlogn)-空间复杂度:O(1)(原地排序)示例:pythondefheap_sort(arr:list)->list:pass示例测试arr=[12,11,13,5,6,7]print(heap_sort(arr))#输出[5,6,7,11,12,13]5.题8(16分):实现一个有效的括号匹配题目描述:给定一个字符串,判断其中的括号(`()`,`{}`,`[]`)是否有效匹配。要求:-可以使用栈实现-时间复杂度:O(n)-空间复杂度:O(n)示例:pythondefisValid(s:str)->bool:pass示例测试print(isValid("()"))#输出Trueprint(isValid("()[]{}"))#输出Trueprint(isValid("(]"))#输出Falseprint(isValid("([)]"))#输出Falseprint(isValid("{[]}"))#输出True三、系统设计题(共2题,每题24分)1.题9(24分):设计一个简单的消息队列题目描述:设计一个简单的消息队列系统,支持以下功能:-`publish(topic,message)`:向指定主题发布消息-`subscribe(topic,subscriber)`:订阅指定主题-`consume(topic)`:获取指定主题的最新消息要求:-支持多个主题和订阅者-消息按发布顺序传递-可以使用Python或Java实现示例:pythonclassMessageQueue:def__init__(self):passdefpublish(self,topic:str,message:str)->None:passdefsubscribe(self,topic:str,subscriber:str)->None:passdefconsume(self,topic:str)->str:pass示例测试mq=MessageQueue()mq.subscribe("sports","user1")mq.subscribe("sports","user2")mq.publish("sports","足球比赛开始")print(mq.consume("sports"))#user1和user2分别获取消息print(mq.consume("sports"))#获取空字符串或None2.题10(24分):设计一个简单的文件缓存系统题目描述:设计一个简单的文件缓存系统,支持以下功能:-`cache_file(file_path)`:缓存指定文件-`get_file(file_path)`:获取指定文件的内容-`evict_file(file_path)`:清除指定文件的缓存要求:-支持缓存固定数量的文件-当缓存满时,优先清除最久未使用的文件-可以使用Python或Java实现示例:pythonclassFileCache:def__init__(self,capacity:int):passdefcache_file(self,file_path:str,content:str)->None:passdefget_file(self,file_path:str)->str:passdefevict_file(self,file_path:str)->None:pass示例测试fc=FileCache(2)fc.cache_file("/file1.txt","内容1")fc.cache_file("/file2.txt","内容2")print(fc.get_file("/file1.txt"))#返回"内容1"fc.cache_file("/file3.txt","内容3")#去除/file2.txtprint(fc.get_file("/file2.txt"))#返回Noneprint(fc.get_file("/file1.txt"))#返回"内容1"答案与解析1.题1(20分):LRU缓存机制答案(Python):pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.order=[]defget(self,key:int)->int:ifkeyinself.cache:self.order.remove(key)self.order.append(key)returnself.cache[key]return-1defput(self,key:int,value:int)->None:ifkeyinself.cache:self.order.remove(key)eliflen(self.cache)>=self.capacity:oldest_key=self.order.pop(0)delself.cache[oldest_key]self.cache[key]=valueself.order.append(key)解析:-使用哈希表`cache`存储键值对,实现O(1)的`get`和`put`操作-使用列表`order`记录访问顺序,通过`remove`和`append`操作维护LRU顺序-当缓存满时,移除`order`中的第一个元素(最久未使用),并从`cache`中删除对应的键值对2.题2(20分):URL化答案(Python):pythondefurlify(s:str,length:int)->str:returns[:length].replace('','%20')解析:-直接截取字符串前`length`个字符,并将空格替换为`%20`-时间复杂度:O(n),其中n为`length`-空间复杂度:O(1),不计算输出空间3.题3(20分):二叉树遍历答案(Python):python前序遍历(递归)defpreorder_recursive(root):ifnotroot:return[]return[root.val]+preorder_recursive(root.left)+preorder_recursive(root.right)前序遍历(迭代)defpreorder_iterative(root):ifnotroot:return[]stack,result=[root],[]whilestack:node=stack.pop()result.append(node.val)ifnode.right:stack.append(node.right)ifnode.left:stack.append(node.left)returnresult中序遍历(递归)definorder_recursive(root):ifnotroot:return[]returninorder_recursive(root.left)+[root.val]+inorder_recursive(root.right)中序遍历(迭代)definorder_iterative(root):stack,result,node=[],[],rootwhilestackornode:whilenode:stack.append(node)node=node.leftnode=stack.pop()result.append(node.val)node=node.rightreturnresult后序遍历(递归)defpostorder_recursive(root):ifnotroot:return[]returnpostorder_recursive(root.left)+postorder_recursive(root.right)+[root.val]后序遍历(迭代)defpostorder_iterative(root):ifnotroot:return[]stack1,stack2,result=[root],[],[]whilestack1:node=stack1.pop()stack2.append(node)ifnode.left:stack1.append(node.left)ifnode.right:stack1.append(node.right)whilestack2:node=stack2.pop()result.append(node.val)returnresult解析:-递归方法直接通过函数调用实现-迭代方法使用栈模拟递归过程,注意前序、中序、后序的遍历顺序-前序:根-左-右-中序:左-根-右-后序:左-右-根4.题4(16分):合并两个有序链表答案(Python):pythondefmergeTwoLists(l1:ListNode,l2:ListNode)->ListNode:dummy=ListNode(0)current=dummywhilel1andl2:ifl1.val<l2.val:current.next=l1l1=l1.nextelse:current.next=l2l2=l2.nextcurrent=current.nextcurrent.next=l1orl2returndummy.next解析:-使用虚拟头节点`dummy`简化边界处理-比较两个链表当前节点的值,将较小的节点连接到结果链表-最后将剩余的链表直接连接到结果链表末尾5.题5(16分):快速排序答案(Python):pythondefquick_sort(arr:list)->list:iflen(arr)<=1:returnarrpivot=arr[len(arr)//2]left=[xforxinarrifx<pivot]middle=[xforxinarrifx==pivot]right=[xforxinarrifx>pivot]returnquick_sort(left)+middle+quick_sort(right)解析:-选择中间元素作为基准(pivot)-将数组分为小于、等于、大于基准的三部分-递归对左右两部分进行排序-时间复杂度:平均O(nlogn),最坏O(n^2)(当基准选择不均匀时)-空间复杂度:O(logn)(递归栈空间)6.题6(16分):二分查找答案(Python):pythondefbinary_search(arr:list,target:int)->int:left,right=0,len(arr)-1whileleft<=right:mid=(left+right)//2ifarr[mid]==target:returnmidelifarr[mid]<target:left=mid+1else:right=mid-1return-1解析:-双指针法,初始`left`指向0,`right`指向数组末尾-每次比较中间元素,根据结果调整指针-如果找到目标值,返回索引;否则返回-17.题7(16分):堆排序答案(Python):pythondefheapify(arr:list,n:int,i:int):largest=ileft=2i+1right=2i+2ifleft<nandarr[largest]<arr[left]:largest=leftifright<nandarr[largest]<arr[right]:largest=rightiflargest!=i:arr[i],arr[largest]=arr[largest],arr[i]heapify(arr,n,largest)defheap_sort(arr:list)->list:n=len(arr)foriinrange(n//2-1,-1,-1):heapify(arr,n,i)foriinrange(n-1,0,-1):arr[i],arr[0]=arr[0],arr[i]heapify(arr,i,0)returnarr解析:-堆排序分为两个步骤:1.建立最大堆2.逐步将堆顶元素与末尾元素交换,并调整堆-`heapify`函数用于维护堆的性质-时间复杂度:O(nlogn)-空间复杂度:O(1)(原地排序)8.题8(16分):有效括号匹配答案(Python):pythondefisValid(s:str)->bool:stack=[]mapping={')':'(','}':'{',']':'['}forcharins:ifcharinmapping:top_element=stack.pop()ifstackelse'#'ifmapping[char]!=top_element:returnFalseelse:stack.append(char)returnnotstack解析:-使用栈存储左括号-遇到右括号时,检查栈顶是否匹配-如果栈为空或栈顶不匹配,返回False-最后栈为空则匹配成功9.题9(24分):消息队列答案(Python):pythonclassMessageQueue:def__init__(self):self.topics={}defpublish(self,topic:str,message:str)->None:iftopicnotinself.topics:self.topics[topic]=[]self.topics[topic].append(message)defsubscribe(self,topic:str,subscriber:str)->None:iftopicnotinself.topics:self.topics[topic]=[]ifsubscribernotinself.topics[topic]:self.topics[topic].append(subscriber)defconsume
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年辽宁省铁岭中小学教师招聘考试题库及答案
- 高中英语北师大版 (2019)必修 第一册Lesson 2 Rules of the Game教案
- 第10课 江南古民居教学设计小学地方、校本课程浙教版人·自然·社会
- 寒暑假教学设计中职基础课-基础模块2-高教版(2023修订版)-(英语)-52
- 期末专区(八年级下册)教学设计初中化学八年级全一册人教版(五四学制)
- 第13课 世界是平的-现代交通和通信教学设计-2025-2026学年小学地方、校本课程粤教版国际理解教育
- 人教版历史与社会七年级下册教学设计综合探究七 区域的变化
- 第一课 开启初中生活教学设计初中道德与法治统编版五四学制2024六年级全一册-统编版五四学制2024
- 第六课 剪纸拉花教学设计小学劳动三年级下册粤教版(主编:徐长发)
- 第6课 主页的装饰教学设计-2025-2026学年小学信息技术(信息科技)第七册黔教版
- 2026年铜陵枞阳国有资本投资控股集团有限公司招聘6名考试参考试题及答案解析
- 初中宾语从句及练习题
- 2026年及未来5年市场数据中国建筑施工升降机行业市场调查研究及发展趋势预测报告
- 机械加工业安全作业行为规范培训
- 基金公司内部激励制度
- 全国工程机械维修工职业技能竞赛理论考试题库(含答案)
- 备考2024年中考数学专题突破(全国通用)专题1-3“12345”模型·选填压轴必备大招(共3种类型)(解析版)
- 部编版语文二年级下册第1单元核心素养教案
- 铁总建设201857号 中国铁路总公司 关于做好高速铁路开通达标评定工作的通知
- HEC-RAS初步教程课件
- 非物质文化遗产的分类
评论
0/150
提交评论