版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年腾讯校招编程题及解析大全一、编程基础(共5题,每题2分,共10分)题目1:编写一个函数,输入一个正整数`n`,返回`n`的阶乘。例如,输入`5`,返回`120`。要求不使用递归。题目2:实现一个函数,判断一个字符串是否是回文串。例如,输入`"abba"`,返回`true`;输入`"abc"`,返回`false`。题目3:给定一个字符串数组`strs`,编写一个函数,返回数组中最长的公共前缀。例如,输入`["flower","flow","flight"]`,返回`"fl"`。题目4:实现一个函数,将一个字符串中的所有大写字母转换为小写字母。例如,输入`"HELLOWORLD"`,返回`"helloworld"`。题目5:编写一个函数,输入一个正整数`n`,返回一个列表,其中包含从`1`到`n`的所有奇数。例如,输入`7`,返回`[1,3,5,7]`。答案与解析题目1答案:pythondeffactorial(n):result=1foriinrange(1,n+1):result=ireturnresult解析:阶乘的计算可以通过循环实现,从`1`乘到`n`。递归方法虽然简洁,但在大数情况下可能导致栈溢出,因此使用循环更安全。题目2答案:pythondefis_palindrome(s):returns==s[::-1]解析:回文串是指正读和反读都相同的字符串。通过反转字符串并与原字符串比较,可以判断是否为回文串。这种方法简单高效。题目3答案:pythondeflongest_common_prefix(strs):ifnotstrs:return""prefix=strs[0]forsinstrs[1:]:whilenots.startswith(prefix):prefix=prefix[:-1]ifnotprefix:return""returnprefix解析:最长公共前缀可以通过逐个比较字符串的每个字符来找到。从第一个字符串开始,不断缩短前缀,直到所有字符串都以此前缀开头。题目4答案:pythondefto_lowercase(s):returns.lower()解析:Python的`lower()`方法可以将字符串中的所有大写字母转换为小写字母,非常方便。题目5答案:pythondefodd_numbers(n):return[iforiinrange(1,n+1)ifi%2==1]解析:通过列表推导式,可以简洁地生成从`1`到`n`的所有奇数。使用`ifi%2==1`判断奇数。二、数据结构与算法(共10题,每题3分,共30分)题目6:给定一个无重复元素的整数数组`nums`和一个目标值`target`,编写一个函数,返回`target`在数组中的索引。例如,输入`nums=[1,2,3,4,5]`,`target=3`,返回`2`。题目7:实现一个函数,输入一个链表的头节点`head`,返回链表的倒数第`k`个节点。例如,输入链表`1->2->3->4->5`,`k=2`,返回节点`4`。题目8:编写一个函数,输入一个正整数`n`,返回`n`的二进制表示中`1`的个数。例如,输入`9`(二进制`1001`),返回`2`。题目9:实现一个函数,输入一个字符串`s`,返回`s`的所有子集。例如,输入`"abc"`,返回`["","a","b","c","ab","ac","bc","abc"]`。题目10:给定一个二维数组`matrix`,编写一个函数,返回所有“之”字形路径的总和。例如,输入`matrix=[[1,2,3],[4,5,6],[7,8,9]]`,返回`1+2+4+5+7`。题目11:实现一个函数,输入一个字符串`s`,返回`s`的所有排列。例如,输入`"abc"`,返回`["abc","acb","bac","bca","cab","cba"]`。题目12:编写一个函数,输入一个正整数`n`,判断`n`是否是素数。例如,输入`7`,返回`true`;输入`10`,返回`false`。题目13:实现一个函数,输入一个链表的头节点`head`,返回链表的中间节点。例如,输入链表`1->2->3->4->5`,返回节点`3`。题目14:编写一个函数,输入一个字符串`s`,返回`s`的最长回文子串。例如,输入`"babad"`,返回`"bab"`或`"aba"`。题目15:给定一个数组`nums`,编写一个函数,返回`nums`的所有子序列。例如,输入`[1,2,3]`,返回`[[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]`。答案与解析题目6答案:pythondefsearch(nums,target):forindex,numinenumerate(nums):ifnum==target:returnindexreturn-1解析:最简单的方法是遍历数组,逐个比较每个元素是否等于`target`。时间复杂度为`O(n)`。题目7答案:pythondefget_kth_node(head,k):fast=slow=headfor_inrange(k):ifnotfast:returnNonefast=fast.nextwhilefast:fast=fast.nextslow=slow.nextreturnslow解析:使用快慢指针法。快指针先走`k`步,然后慢指针和快指针同时走,当快指针到达末尾时,慢指针即指向倒数第`k`个节点。题目8答案:pythondefcount_bits(n):count=0whilen:count+=n&1n>>=1returncount解析:通过位运算统计`1`的个数。每次右移一位,并与`1`进行与运算,统计结果中`1`的个数。题目9答案:pythondefsubsets(s):result=[]subset=[]defbacktrack(start):result.append(subset.copy())foriinrange(start,len(s)):subset.append(s[i])backtrack(i+1)subset.pop()backtrack(0)returnresult解析:子集问题可以使用回溯法解决。通过递归遍历每个元素,选择或不选择,最终生成所有子集。题目10答案:pythondefzigzag_sum(matrix):ifnotmatrix:return0n=len(matrix)result=0foriinrange(n):result+=matrix[i][i]returnresult解析:“之”字形路径的求和实际上就是主对角线上的元素之和。直接遍历主对角线即可。题目11答案:pythondefpermute(s):result=[]defbacktrack(path):iflen(path)==len(s):result.append("".join(path))returnforcharinset(s):ifcharnotinpath:path.append(char)backtrack(path)path.pop()backtrack([])returnresult解析:排列问题可以使用回溯法解决。通过递归遍历每个字符,选择一个字符后,继续递归,最后生成所有排列。题目12答案:pythondefis_prime(n):ifn<=1:returnFalseforiinrange(2,int(n0.5)+1):ifn%i==0:returnFalsereturnTrue解析:判断素数的方法是检查从`2`到`sqrt(n)`之间是否有因数。如果有,则不是素数;否则是素数。题目13答案:pythondefmiddle_node(head):slow=fast=headwhilefastandfast.next:slow=slow.nextfast=fast.next.nextreturnslow解析:中间节点问题同样可以使用快慢指针法。快指针每次走两步,慢指针每次走一步,当快指针到达末尾时,慢指针即指向中间节点。题目14答案:pythondeflongest_palindrome(s):ifnots:return""start,end=0,0foriinrange(len(s)):len1=expand_from_center(s,i,i)len2=expand_from_center(s,i,i+1)max_len=max(len1,len2)ifmax_len>end-start:start=i-(max_len-1)//2end=i+max_len//2returns[start:end+1]解析:最长回文子串问题可以使用中心扩展法。遍历每个字符,以每个字符为中心,向两边扩展,找到最长的回文子串。题目15答案:pythondefsubsets_with_dup(nums):result=[]subset=[]nums.sort()defbacktrack(start):result.append(subset.copy())foriinrange(start,len(nums)):ifi>startandnums[i]==nums[i-1]:continuesubset.append(nums[i])backtrack(i+1)subset.pop()backtrack(0)returnresult解析:子序列问题类似于子集问题,但需要考虑重复元素。通过排序后,跳过重复元素,避免生成重复的子序列。三、动态规划(共5题,每题6分,共30分)题目16:给定一个数组`nums`,编写一个函数,返回`nums`的最长递增子序列的长度。例如,输入`nums=[10,9,2,5,3,7,101,18]`,返回`4`(子序列`[2,3,7,101]`)。题目17:编写一个函数,输入一个字符串`s`,返回`s`的最长有效括号子串的长度。例如,输入`"(()"`,返回`2`。题目18:给定一个正整数`n`,编写一个函数,返回`1`到`n`的所有数字组成的所有可能的排列组合。例如,输入`n=3`,返回`["1","2","3","12","13","23","123"]`。题目19:实现一个函数,输入一个字符串`s`,返回`s`的所有分割方式,使得每个子串都是回文串。例如,输入`"aab"`,返回`[["a","a","b"],["aa","b"]]`。题目20:给定一个正整数`n`,编写一个函数,返回`n`的汉诺塔移动步骤。例如,输入`n=2`,返回`["movediskfromAtoC","movediskfromAtoB","movediskfromCtoB"]`。答案与解析题目16答案:pythondeflength_of_lis(nums):dp=[1]len(nums)foriinrange(1,len(nums)):forjinrange(i):ifnums[i]>nums[j]:dp[i]=max(dp[i],dp[j]+1)returnmax(dp)解析:最长递增子序列问题可以使用动态规划解决。`dp[i]`表示以`nums[i]`结尾的最长递增子序列的长度。通过遍历每个元素,更新`dp`数组,最后返回`dp`数组中的最大值。题目17答案:pythondeflongest_valid_parentheses(s):stack=[-1]max_len=0fori,charinenumerate(s):ifchar=='(':stack.append(i)else:stack.pop()ifnotstack:stack.append(i)else:max_len=max(max_len,i-stack[-1])returnmax_len解析:最长有效括号问题可以使用栈解决。通过遍历字符串,使用栈记录左括号的位置,当遇到右括号时,计算有效括号的长度,并更新最大值。题目18答案:pythondefgenerate_combinations(n):result=[]defbacktrack(path):iflen(path)==n:result.append("".join(path))returnforiinrange(1,n+1):ifstr(i)notinpath:path.append(str(i))backtrack(path)path.pop()backtrack([])returnresult解析:数字排列组合问题可以使用回溯法解决。通过递归遍历每个数字,选择一个数字后,继续递归,最后生成所有排列组合。题目19答案:pythondefpartition(s):result=[]defbacktrack(start,path):ifstart==len(s):result.append(path.copy())returnforiinrange(start,len(s)):ifs[start:i+1]==s[start:i+1][::-1]:path.append(s[start:i+1])backtrack(i+1,path)path.pop()backtrack(0,[])returnresult解析:回文分割问题可以使用回溯法解决。通过递归遍历每个子串,选择一个回文子串后,继续递归,最后生成所有分割方式。题目20答案:pythondefhanoi(n,source,target,auxiliary):ifn==1:return[f"movediskfrom{source}to{target}"]steps=[]steps+=hanoi(n-1,source,auxiliary,target)steps.append(f"movediskfrom{source}to{target}")steps+=hanoi(n-1,auxiliary,target,source)returnsteps解析:汉诺塔问题可以使用递归解决。将`n-1`个盘子从源柱子移动到辅助柱子,然后移动最大的盘子到目标柱子,最后将`n-1`个盘子从辅助柱子移动到目标柱子。四、系统设计(共5题,每题8分,共40分)题目21:设计一个LRU(LeastRecentlyUsed)缓存,支持`get`和`put`操作。缓存容量为`capacity`。例如,容量为`2`的缓存,`put(1,1)`后`put(2,2)`,再`get(1)`返回`1`,然后`put(3,3)`会删除`2`。题目22:设计一个URL短链接服务,输入一个长URL,返回一个短URL,输入短URL,返回长URL。例如,输入`/long-url`,返回`http://short.ly/abc`,输入`http://short.ly/abc`,返回`/long-url`。题目23:设计一个简单的消息队列,支持`publish`和`subscribe`操作。例如,订阅主题`"sports"`的用户收到`"足球比赛"`的消息。题目24:设计一个微博系统,支持用户发布微博、关注用户、获取关注用户的微博列表。例如,用户`A`关注用户`B`,`B`发布微博,`A`可以获取到`B`的微博。题目25:设计一个简单的秒杀系统,支持用户提交购买请求,系统返回是否抢到商品。例如,库存为`1`,用户`A`和`B`同时请求,系统只允许一个用户抢到。答案与解析题目21答案:pythonclassLRUCache:def__init__(self,capacity):self.capacity=capacityself.cache={}self.order=[]defget(self,key):ifkeyinself.cache:self.order.remove(key)self.order.append(key)returnself.cache[key]return-1defput(self,key,value):ifkeyinself.cache:self.order.remove(key)eliflen(self.cache)>=self.capacity:oldest=self.order.pop(0)delself.cache[oldest]self.cache[key]=valueself.order.append(key)解析:LRU缓存可以使用哈希表和双向链表实现。哈希表存储键值对,双向链表存储访问顺序。`get`操作将元素移动到链表末尾,`put`操作如果超出容量,删除链表头部元素。题目22答案:pythonimporthashlibimportrandomclassURLShortener:def__init__(self):self.url_map={}def_hash(self,url):returnhashlib.md5(url.encode()).hexdigest()defshorten(self,long_url):hash_url=self._hash(long_url)short_url=f"http://short.ly/{hash_url[:6]}"self.url_map[short_url]=long_urlreturnshort_urldefrestore(self,short_url):returnself.url_map.get(short_url,None)解析:URL短链接服务可以使用哈希函数将长URL映射为短URL。为了防止冲突,可以使用MD5哈希,并取前6位作为短链接。题目23答案:pythonclassMessageQueue:def__init__(self):self.subscribers={}defsubscribe(self,topic,subscriber):iftopicnotinself.subscribers:self.subscribers[topic]=set()self.subscribers[topic].add(subscriber)defpublish(self,topic,message):iftopicinself.subscribers:forsubscriberinself.subscribers[topic]:subscriber.receive(message)解析:消息队列可以使用哈希表存储订阅关系。`subscribe`操作将用户添加到主题的订阅者列表中,`publish`操作将
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 糖果成型工操作技能测试考核试卷含答案
- 职业技能训练师安全素养评优考核试卷含答案
- 镀锡工复试强化考核试卷含答案
- 托育师岗前基础常识考核试卷含答案
- 肉品分级员班组考核强化考核试卷含答案
- 洗衣粉制造工创新应用能力考核试卷含答案
- 稀土离子交换工岗前可持续发展考核试卷含答案
- 临床检验类设备组装调试工岗前岗后考核试卷含答案
- 企业培训师安全理论水平考核试卷含答案
- 2026百威招聘ai面试题及答案
- 沥青路面灌缝施工技术规范
- 2026年儿童康复科年度质控与安全管理计划
- 2025年甘肃省兰州市八年级地理生物会考真题试卷(含答案)
- 2026中国具身智能产业发展白皮书
- 国企行测常识900题题库
- 煤矿事故案例分析
- ASME B16.10-2022 阀门结构长度(中英文参考版)
- 2026年兵团连队职工种植技术高频错题专项练习题含答案
- 上海众合司法考协议书班
- 沟通的艺术课件
- ICU护患沟通课件
评论
0/150
提交评论