版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年字节跳动面试题集与解析一、编程基础题(5题,每题10分,共50分)题目1(10分)请用Python实现一个函数,输入一个字符串,返回该字符串中所有唯一字符的列表(重复字符只保留第一次出现的位置)。例如,输入"abaccde",输出应为['a','b','c','d','e']。pythondefunique_chars(s):你的代码题目2(10分)请用C++实现一个无重复元素的最小子集。给定一个正整数数组,返回其中不包含重复数字的最小子集。例如,输入[1,2,2,3],可能输出[1,2]。cppinclude<vector>usingnamespacestd;vector<int>min_subset(vector<int>&nums){//你的代码}题目3(10分)实现一个LRU(最近最少使用)缓存,支持get和put操作。要求:1.get(key)-返回key对应的value,如果不存在返回-12.put(key,value)-插入或更新key的值。缓存容量为固定值,超出时需要删除最久未使用的元素。javaclassLRUCache{//你的代码}题目4(10分)给定一个整数数组,找出三个数使得它们的乘积最大。假设数组长度至少为3。例如,输入[1,2,-1,4],输出应为8(-1×-1×4)。pythondefmaximum_product(nums):你的代码题目5(10分)实现一个二叉树的最大深度(最大高度)计算。给定一个二叉树的根节点,返回其最大深度。从根到叶的最长路径上的节点数。javascriptfunctionmaxDepth(root){//你的代码}二、算法设计题(4题,每题15分,共60分)题目6(15分)设计一个算法,将一个有序数组转换为二叉搜索树。要求:转换后的二叉搜索树应保持原始数组的中序遍历顺序。例如,输入[1,2,3,4,5],输出应为:3/\14\2\5pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefsorted_array_to_bst(nums):你的代码题目7(15分)设计一个算法,找出数组中重复次数超过数组长度一半的元素。假设数组长度为n,至少存在一个元素出现次数超过n/2。例如,输入[1,2,3,1,1],输出应为1。javapublicintmajorityElement(int[]nums){//你的代码}题目8(15分)设计一个算法,找出无重复字符的最长子串。给定一个字符串,返回其最长子串的长度,该子串中的所有字符在原字符串中不重复。例如,输入"abcabcbb",输出为3("abc")。pythondeflength_of_longest_substring(s):你的代码题目9(15分)设计一个算法,实现LRU缓存的高效实现。要求:1.get(key)-返回key对应的value,如果不存在返回-12.put(key,value)-插入或更新key的值。缓存容量为固定值,超出时需要删除最久未使用的元素。要求时间复杂度为O(1)。javascriptclassLRUCache{constructor(capacity){//你的代码}get(key){//你的代码}put(key,value){//你的代码}}三、系统设计题(2题,每题25分,共50分)题目10(25分)设计一个简单的消息队列系统。要求:1.支持生产者-消费者模式2.能够处理高并发情况3.具备基本的错误处理机制4.说明主要的数据结构和算法选择。假设使用Java实现。javainterfaceMessageQueue{voidproduce(Stringmessage);Stringconsume();}classSimpleMessageQueueimplementsMessageQueue{//你的代码}题目11(25分)设计一个短链接生成系统。要求:1.输入长链接,输出短链接2.短链接应具有唯一性和可访问性3.支持对短链接的统计和重定向功能4.说明主要的数据结构和算法选择。假设使用Node.js实现。javascriptclassShortLinkSystem{constructor(){//你的代码}generateLongUrl(shortUrl){//你的代码}getShortUrl(longUrl){//你的代码}}答案与解析编程基础题答案与解析题目1答案pythondefunique_chars(s):seen=set()result=[]forcharins:ifcharnotinseen:seen.add(char)result.append(char)returnresult解析:使用集合记录已见字符,列表存储唯一字符。遍历字符串,若字符未在集合中,则添加到集合和结果列表。时间复杂度O(n),空间复杂度O(n)。题目2答案cppinclude<vector>include<unordered_set>usingnamespacestd;vector<int>min_subset(vector<int>&nums){vector<int>result;unordered_set<int>seen;for(intnum:nums){if(seen.find(num)==seen.end()){seen.insert(num);result.push_back(num);}}returnresult;}解析:使用集合记录已见元素,遍历数组,只保留未见的元素。最后返回的子集即为不包含重复数字的最小子集。时间复杂度O(n),空间复杂度O(n)。题目3答案javaclassLRUCache{privateintcapacity;privateMap<Integer,Node>map;privateNodehead,tail;classNode{intkey,value;Nodeprev,next;Node(intkey,intvalue){this.key=key;this.value=value;}}publicLRUCache(intcapacity){this.capacity=capacity;map=newHashMap<>();head=newNode(0,0);tail=newNode(0,0);head.next=tail;tail.prev=head;}publicintget(intkey){Nodenode=map.get(key);if(node==null)return-1;moveToHead(node);returnnode.value;}publicvoidput(intkey,intvalue){Nodenode=map.get(key);if(node==null){NodenewNode=newNode(key,value);map.put(key,newNode);addNode(newNode);if(map.size()>capacity){NodetoDel=removeTail();map.remove(toDel.key);}}else{node.value=value;moveToHead(node);}}privatevoidaddNode(Nodenode){node.prev=head;node.next=head.next;head.next.prev=node;head.next=node;}privatevoidremoveNode(Nodenode){node.prev.next=node.next;node.next.prev=node.prev;}privatevoidmoveToHead(Nodenode){removeNode(node);addNode(node);}privateNoderemoveTail(){Noderes=tail.prev;removeNode(res);returnres;}}解析:使用双向链表+哈希表实现LRU缓存。链表头为最近使用,尾为最久未使用。get操作将节点移至头部,put操作插入新节点至头部,若超出容量则删除尾部节点。时间复杂度O(1)。题目4答案pythondefmaximum_product(nums):iflen(nums)<3:return0nums.sort()returnmax(nums[0]nums[1]nums[-1],nums[-1]nums[-2]nums[-3])解析:排序后,最大乘积可能是两个负数和一个正数的乘积,或三个最大正数的乘积。比较这两种情况的最大值即可。时间复杂度O(nlogn)。题目5答案javascriptfunctionmaxDepth(root){if(root===null)return0;letleft=maxDepth(root.left);letright=maxDepth(root.right);returnMath.max(left,right)+1;}解析:递归计算左右子树的最大深度,取较大值加1。空节点深度为0。时间复杂度O(n),空间复杂度O(h)。答案与解析(续)算法设计题答案与解析题目6答案pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefsorted_array_to_bst(nums):ifnotnums:returnNonemid=len(nums)//2root=TreeNode(nums[mid])root.left=sorted_array_to_bst(nums[:mid])root.right=sorted_array_to_bst(nums[mid+1:])returnroot解析:二分查找构建平衡二叉搜索树。中点为根节点,左半边为左子树,右半边为右子树。递归构建。时间复杂度O(n),空间复杂度O(logn)。题目7答案javapublicintmajorityElement(int[]nums){intcount=0;Integercandidate=null;for(intnum:nums){if(count==0){candidate=num;}count+=(num==candidate)?1:-1;}returncandidate;}解析:Boyer-Moore投票算法。多数元素会在遍历过程中抵消其他元素,最终保留的候选者即为多数元素。时间复杂度O(n),空间复杂度O(1)。题目8答案pythondeflength_of_longest_substring(s):char_map={}left=0max_len=0forrightinrange(len(s)):ifs[right]inchar_map:left=max(left,char_map[s[right]]+1)char_map[s[right]]=rightmax_len=max(max_len,right-left+1)returnmax_len解析:滑动窗口算法。维护一个字符映射和左右指针。右指针遍历字符串,若字符已存在且在窗口内,则左指针移动到重复字符后一位。更新字符映射和最大长度。时间复杂度O(n),空间复杂度O(1)。题目9答案javascriptclassLRUCache{constructor(capacity){this.capacity=capacity;this.map=newMap();this.head=newNode(0,0);this.tail=newNode(0,0);this.head.next=this.tail;this.tail.prev=this.head;}get(key){if(!this.map.has(key))return-1;constnode=this.map.get(key);this.moveToHead(node);returnnode.value;}put(key,value){if(this.map.has(key)){constnode=this.map.get(key);node.value=value;this.moveToHead(node);}else{constnewNode=newNode(key,value);this.map.set(key,newNode);this.addNode(newNode);if(this.map.size>this.capacity){consttoDel=this.removeTail();this.map.delete(toDel.key);}}}addNode(node){node.prev=this.head;node.next=this.head.next;this.head.next.prev=node;this.head.next=node;}removeNode(node){node.prev.next=node.next;node.next.prev=node.prev;}moveToHead(node){this.removeNode(node);this.addNode(node);}removeTail(){constres=this.tail.prev;this.removeNode(res);returnres;}}classNode{constructor(key,value){this.key=key;this.value=value;this.prev=null;this.next=null;}}解析:与Java版本类似,使用Map和双向链表实现。Map存储键值对,双向链表维护访问顺序。get操作将节点移至头部,put操作插入新节点至头部,若超出容量则删除尾部节点。时间复杂度O(1)。系统设计题答案与解析题目10答案javainterfaceMessageQueue{voidproduce(Stringmessage);Stringconsume();}classSimpleMessageQueueimplementsMessageQueue{privateQueue<String>queue;privateReentrantLocklock;privateConditionnotEmpty;privateConditionnotFull;publicSimpleMessageQueue(intcapacity){this.queue=newLinkedList<>();this.lock=newReentrantLock();this.notEmpty=lock.newCondition();this.notFull=lock.newCondition();}publicvoidproduce(Stringmessage){lock.lock();try{while(queue.size()==Integer.MAX_VALUE){notFull.await();}queue.offer(message);notEmpty.signal();}catch(InterruptedExceptione){Thread.currentThread().interrupt();}finally{lock.unlock();}}publicStringconsume(){lock.lock();try{while(queue.isEmpty()){notEmpty.await();}Stringmessage=queue.poll();notFull.signal();returnmessage;}catch(InterruptedExceptione){Thread.currentThread().interrupt();returnnull;}finally{lock.unlock();}}}解析:使用阻塞队列+锁实现消息队列。生产者等待队列不满,消费者等待队列不空。使用ReentrantLock和Condition实现线程安全。支持高并发和异常处理。时间复杂度O(1)。题目11答案javascriptclassShortLinkSystem{constructor()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026企业可持续发展经理人调研报告洞察详析
- 2026年浙江省军队转业干部统一考试(公共基础知识)考前模拟试题及答案
- 人工智能在运动训练效果预测中的应用-洞察与解读
- 2026年物业管理师职业技能鉴定考试试题及答案(理论知识高级、三级)(驻马店)
- 分布式账本技术在选民身份验证中的效果评估-洞察与解读
- 2026年四川省内江市事业单位公开选调工作人员考试(职业能力测试)复习题及答案
- 植物蛋白在宠物饲料中的营养价值评估-洞察与解读
- 2026年全国物业管理师资格考试(物业管理基本制度与政策)(建设部)强化训练试题及答案
- 2026年勘察设计注册化工工程师考试(专业案例)模拟试题及答案(云南省)
- 2026年江苏南京公开国企招聘真题试题及答案
- 2026年关于入党测试题及答案
- 2026福建蓝碳信用体系建设评估规划报告
- 埃博拉病毒病诊疗方案(2026年版)解读课件
- 2026年高考地理三轮复习:10大地理热点考点+模拟试题(含答案)
- 公安院校公安专业招生政治考察表下载
- 2026年合肥高新区社区工作者招聘96名笔试参考题库及答案解析
- 凉山州2025年四川凉山州州属事业单位选调工作人员53名笔试历年参考题库典型考点附带答案详解
- 2026甘肃中考地理考前一周加分卷含答案
- GJB190A-2024《特性分类》标准深度解读
- 工商银行装修工程施工组织设计
- 2026年高考新高考II卷英语考试试卷及答案
评论
0/150
提交评论