2026年程序设计及算法面试题目集_第1页
2026年程序设计及算法面试题目集_第2页
2026年程序设计及算法面试题目集_第3页
2026年程序设计及算法面试题目集_第4页
2026年程序设计及算法面试题目集_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026年程序设计及算法面试题目集1.代码填充题(共3题,每题10分)题目要求:根据题意,在代码的空白处填入合适的代码片段,使程序功能完整。第1题(10分):实现一个函数,输入一个整数数组,返回数组中所有唯一元素的最大乘积。如果唯一元素少于两个,返回-1。pythondefmax_unique_product(nums):请在此处填入代码pass第2题(10分):实现一个函数,输入一个字符串,返回该字符串中不重复字符的最长子串长度。pythondeflength_of_longest_unique_substring(s):请在此处填入代码pass第3题(10分):实现一个函数,输入一个链表头节点,返回链表中倒数第k个节点。如果k大于链表长度,返回None。pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefget_kth_from_end(head,k):请在此处填入代码pass2.编程实现题(共4题,每题15分)题目要求:根据题意,编写完整的代码实现。第1题(15分):实现一个LRU(LeastRecentlyUsed)缓存,支持get和put操作。缓存容量固定,超出容量时淘汰最久未使用的元素。pythonclassLRUCache:def__init__(self,capacity:int):请在此处填入代码passdefget(self,key:int)->int:请在此处填入代码passdefput(self,key:int,value:int)->None:请在此处填入代码pass第2题(15分):实现一个函数,输入一个二叉树,返回其深度。二叉树节点定义如下:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefmax_depth(root):请在此处填入代码pass第3题(15分):实现一个函数,输入一个字符串,返回该字符串的所有子集。例如,输入"abc",返回["","a","b","ab","c","ac","bc","abc"]。pythondefsubsets(s):请在此处填入代码pass第4题(15分):实现一个函数,输入一个整数n,返回所有可能的括号组合。例如,n=3时,返回[["(",")(","(())","(()","())","((())","(()(","((()))"]。pythondefgenerate_parentheses(n):请在此处填入代码pass3.算法设计题(共3题,每题20分)题目要求:根据题意,设计算法并说明时间复杂度。第1题(20分):有一个无序数组,包含重复元素,请设计一个算法,找出数组中出现次数超过一半的元素。假设一定存在这样的元素。pythondefmajority_element(nums):请在此处填入代码pass第2题(20分):给定一个字符串,判断是否可以通过翻转子字符串的方式使其成为回文串。例如,输入"aab",可以翻转"aa"得到"baab",是回文串。pythondefcanBecomePalindrome(s):请在此处填入代码pass第3题(20分):有一个mn的网格,从左上角出发,每次只能向右或向下移动,到达右下角。路径中数字之和最大是多少?网格定义如下:pythondefmax_path_sum(grid):请在此处填入代码pass4.数据结构与算法应用题(共2题,每题25分)题目要求:结合实际场景,设计数据结构和算法。第1题(25分):实现一个任务调度器,输入一系列任务及其执行时间(例如[("task1",2),("task2",3),...]),按照任务优先级(优先级高的先执行)和执行时间排序,返回执行顺序。如果多个任务优先级相同,按输入顺序执行。pythonimportheapqdeftask_scheduler(tasks):请在此处填入代码pass第2题(25分):设计一个算法,输入一个字符串,判断是否是有效的括号组合。例如,输入"()[]{}",返回True;输入"([)]",返回False。pythondefisValid(s):请在此处填入代码pass答案与解析1.代码填充题第1题:pythondefmax_unique_product(nums):fromcollectionsimportCountercount=Counter(nums)unique_nums=[numfornum,cntincount.items()ifcnt==1]iflen(unique_nums)<2:return-1returnprod(unique_nums)解析:先统计数组中每个数字的出现次数,筛选出唯一元素(出现次数为1的数字),然后计算这些数字的乘积。如果唯一元素少于两个,返回-1。第2题:pythondeflength_of_longest_unique_substring(s):left=0max_len=0char_set=set()forrightinrange(len(s)):whiles[right]inchar_set:char_set.remove(s[left])left+=1char_set.add(s[right])max_len=max(max_len,right-left+1)returnmax_len解析:使用滑动窗口方法,维护一个不重复字符的集合。遍历字符串时,如果当前字符已存在于集合中,则移动左指针并移除字符,直到当前字符不重复为止。每次更新最大子串长度。第3题:pythondefget_kth_from_end(head,k):fast=slow=headfor_inrange(k):ifnotfast:returnNonefast=fast.nextwhilefast:fast=fast.nextslow=slow.nextreturnslow解析:使用双指针法。先让快指针移动k步,然后慢指针和快指针同时移动,当快指针到达末尾时,慢指针即为倒数第k个节点。2.编程实现题第1题: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)self.cache[key]=valueself.order.append(key)iflen(self.cache)>self.capacity:oldest_key=self.order.pop(0)delself.cache[oldest_key]解析:使用哈希表存储键值对,维护一个双向队列记录访问顺序。get时移动键到队尾,put时如果超出容量则删除最久未使用的元素。第2题:pythondefmax_depth(root):ifnotroot:return0return1+max(max_depth(root.left),max_depth(root.right))解析:递归计算左右子树的最大深度,加1为当前节点深度。第3题:pythondefsubsets(s):res=[]subset=[]defbacktrack(i):res.append(subset.copy())forjinrange(i,len(s)):subset.append(s[j])backtrack(j+1)subset.pop()backtrack(0)returnres解析:回溯法生成所有子集。遍历每个字符,选择或不选择,递归生成所有组合。第4题:pythondefgenerate_parentheses(n):res=[]defbacktrack(left=0,right=0,path=""):iflen(path)==2n:res.append(path)returnifleft<n:backtrack(left+1,right,path+"(")ifright<left:backtrack(left,right+1,path+")")backtrack()returnres解析:回溯法生成所有括号组合。确保左括号数量不超过n,右括号数量不超过左括号。3.算法设计题第1题:pythondefmajority_element(nums):count=0candidate=Nonefornuminnums:ifcount==0:candidate=numcount+=(1ifnum==candidateelse-1)returncandidate解析:Boyer-Moore投票算法。遍历数组,维护候选者和计数器,最终候选者为答案。第2题:pythondefcanBecomePalindrome(s):fromcollectionsimportCountercount=Counter(s)odd_count=sum(1forcntincount.values()ifcnt%2==1)returnodd_count<=1解析:回文串中最多有一个字符出现奇数次。统计字符出现次数,判断奇数次字符数量是否合法。第3题:pythondefmax_path_sum(grid):m,n=len(grid),len(grid[0])dp=[[0]nfor_inrange(m)]dp[0][0]=grid[0][0]foriinrange(1,m):dp[i][0]=dp[i-1][0]+grid[i][0]forjinrange(1,n):dp[0][j]=dp[0][j-1]+grid[0][j]foriinrange(1,m):forjinrange(1,n):dp[i][j]=max(dp[i-1][j],dp[i][j-1])+grid[i][j]returndp[-1][-1]解析:动态规划。dp[i][j]表示到达(i,j)的最大路径和,从左上角开始填充。4.数据结构与算法应用题第1题:pythonimportheapqdeftask_scheduler(tasks):priority_queue=[]fortask,timeintasks:heapq.heappush(priority_queue,(time,task))order=[]whilepriority_queue:time,task=heapq.heappop(priority_queue)order.append(task)iftime>1:heapq.heappush(priority_queue,(time-1,task))returnorder解析:使用优先队列(最小堆)按执行时间排序任务,模拟执行过程。第2题:pythondefisValid(s):stack=[]mapp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论