版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年程序员编程竞赛面试题含答案一、编程语言基础(共3题,每题10分)1.题目(10分):请用Python编写一个函数,实现将输入的十进制数转换为二进制字符串。如果输入不是正整数,则返回错误信息“输入必须为正整数”。答案:pythondefdecimal_to_binary(n):ifnotisinstance(n,int)orn<0:return"输入必须为正整数"returnbin(n)[2:]测试用例print(decimal_to_binary(10))#输出:1010print(decimal_to_binary(-5))#输出:输入必须为正整数print(decimal_to_binary(0))#输出:0解析:-`isinstance(n,int)`检查输入是否为整数。-`n<0`确保输入为正数。-`bin(n)[2:]`将十进制转为二进制字符串,并去掉前缀`0b`。2.题目(10分):请用Java实现一个方法,接收一个字符串,返回该字符串中所有字符的频率统计(字符为键,频率为值)。例如,输入`"hello"`,输出`{'h':1,'e':1,'l':2,'o':1}`。答案:javaimportjava.util.HashMap;importjava.util.Map;publicclassFrequencyCounter{publicstaticMap<Character,Integer>countFrequency(Strings){Map<Character,Integer>freq=newHashMap<>();for(charc:s.toCharArray()){freq.put(c,freq.getOrDefault(c,0)+1);}returnfreq;}publicstaticvoidmain(String[]args){System.out.println(countFrequency("hello"));//输出:{h=1,e=1,l=2,o=1}}}解析:-使用`HashMap`存储字符和频率。-`getOrDefault(c,0)`避免键不存在时的异常。3.题目(10分):请用C++编写一个函数,实现删除字符串中的所有重复字符,并返回新字符串。例如,输入`"abracadabra"`,输出`"acdr"`。答案:cppinclude<iostream>include<string>include<unordered_set>std::stringremoveDuplicates(conststd::string&s){std::unordered_set<char>seen;std::stringresult;for(charc:s){if(seen.insert(c).second){//如果插入成功(即未重复),则添加到结果result+=c;}}returnresult;}intmain(){std::cout<<removeDuplicates("abracadabra")<<std::endl;//输出:acdrreturn0;}解析:-`unordered_set`用于记录已见字符,`insert().second`返回是否插入成功。-只有首次出现的字符被添加到结果中。二、数据结构与算法(共4题,每题15分)1.题目(15分):请用Java实现快速排序算法,并对数组`{8,3,1,7,0,10,5}`进行排序。答案:javapublicclassQuickSort{publicstaticvoidquickSort(int[]arr,intlow,inthigh){if(low<high){intpivotIndex=partition(arr,low,high);quickSort(arr,low,pivotIndex-1);quickSort(arr,pivotIndex+1,high);}}privatestaticintpartition(int[]arr,intlow,inthigh){intpivot=arr[high];inti=low-1;for(intj=low;j<high;j++){if(arr[j]<pivot){i++;swap(arr,i,j);}}swap(arr,i+1,high);returni+1;}privatestaticvoidswap(int[]arr,inti,intj){inttemp=arr[i];arr[i]=arr[j];arr[j]=temp;}publicstaticvoidmain(String[]args){int[]arr={8,3,1,7,0,10,5};quickSort(arr,0,arr.length-1);for(intnum:arr){System.out.print(num+"");//输出:01357810}}}解析:-快速排序通过分治思想实现,核心是`partition`函数。-每次选择一个基准值(这里取末尾),将小于它的放左边,大于它的放右边。2.题目(15分):请用Python实现二叉树的层序遍历(广度优先遍历),并输出节点值列表。例如,输入如下树:1/\23/\\456输出:`[1,2,3,4,5,6]`。答案:pythonfromcollectionsimportdequeclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdeflevelOrder(root):ifnotroot:return[]result=[]queue=deque([root])whilequeue:level_size=len(queue)for_inrange(level_size):node=queue.popleft()result.append(node.val)ifnode.left:queue.append(node.left)ifnode.right:queue.append(node.right)returnresult构建示例树root=TreeNode(1)root.left=TreeNode(2)root.right=TreeNode(3)root.left.left=TreeNode(4)root.left.right=TreeNode(5)root.right.right=TreeNode(6)print(levelOrder(root))#输出:[1,2,3,4,5,6]解析:-使用队列实现BFS,按层级遍历节点。-每次处理当前层级的所有节点,并将其子节点加入队列。3.题目(15分):请用C++实现一个函数,检测链表中是否存在环(可以使用快慢指针法)。答案:cppinclude<iostream>structListNode{intval;ListNodenext;ListNode(intx):val(x),next(nullptr){}};boolhasCycle(ListNodehead){if(!head||!head->next)returnfalse;ListNodeslow=head;ListNodefast=head->next;while(slow!=fast){if(!fast||!fast->next)returnfalse;slow=slow->next;fast=fast->next->next;}returntrue;}intmain(){ListNodehead=newListNode(1);head->next=newListNode(2);head->next->next=newListNode(3);head->next->next->next=head->next;//形成环std::cout<<(hasCycle(head)?"存在环":"无环")<<std::endl;//输出:存在环return0;}解析:-快慢指针分别以不同速度移动,若相遇则存在环。-若快指针到达`nullptr`,则无环。4.题目(15分):请用Java实现一个算法,找出数组中第K大的元素。例如,输入`{3,2,1,5,6,4}`,`k=2`,输出`5`。答案:javaimportjava.util.PriorityQueue;publicclassKthLargestElement{publicstaticintfindKthLargest(int[]nums,intk){PriorityQueue<Integer>minHeap=newPriorityQueue<>();for(intnum:nums){minHeap.offer(num);if(minHeap.size()>k){minHeap.poll();//保持堆大小为k}}returnminHeap.peek();}publicstaticvoidmain(String[]args){int[]nums={3,2,1,5,6,4};System.out.println(findKthLargest(nums,2));//输出:5}}解析:-使用最小堆维护前`k`个最大元素。-堆大小超过`k`时弹出最小值,最终堆顶即为第`k`大元素。三、系统设计(共2题,每题20分)1.题目(20分):设计一个短链接(TinyURL)生成系统。要求:-输入任意URL,返回固定长度的短链接。-支持反向解析,输入短链接可还原原URL。-系统需支持高并发访问。答案:javaimportjava.util.Random;publicclassTinyURL{privatestaticfinalStringCHAR_SET="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";privatestaticfinalintSHORT_URL_LENGTH=6;privateMap<String,String>urlMap=newHashMap<>();privateRandomrandom=newRandom();//生成短链接publicStringgenerateShortURL(StringlongURL){StringshortCode=generateRandomCode();while(urlMap.containsKey(shortCode)){//避免重复shortCode=generateRandomCode();}urlMap.put(shortCode,longURL);return"/"+shortCode;}//反向解析publicStringgetLongURL(StringshortURL){StringshortCode=shortURL.substring("/".length());returnurlMap.getOrDefault(shortCode,"URLnotfound");}privateStringgenerateRandomCode(){StringBuildersb=newStringBuilder();for(inti=0;i<SHORT_URL_LENGTH;i++){sb.append(CHAR_SET.charAt(random.nextInt(CHAR_SET.length())));}returnsb.toString();}//示例publicstaticvoidmain(String[]args){TinyURLtinyURL=newTinyURL();StringlongURL="/blog/post";StringshortURL=tinyURL.generateShortURL(longURL);System.out.println("ShortURL:"+shortURL);System.out.println("LongURL:"+tinyURL.getLongURL(shortURL));}}解析:-使用随机字符串作为短码,避免冲突。-`HashMap`存储短码与长URL的映射。-高并发可通过分布式缓存(如Redis)优化。2.题目(20分):设计一个简单的微博系统,支持以下功能:-用户发布微博(包含文本和发布时间)。-用户关注/取消关注其他用户。-用户查看自己关注的人的微博(按时间倒序)。答案:javaimportjava.time.LocalDateTime;importjava.util.;classUser{Stringusername;Set<User>followers=newHashSet<>();Set<User>following=newHashSet<>();List<Tweet>tweets=newArrayList<>();publicUser(Stringusername){this.username=username;}publicvoidfollow(Useruser){following.add(user);user.followers.add(this);}publicvoidunfollow(Useruser){following.remove(user);user.followers.remove(this);}publicvoidpostTweet(Stringtext){tweets.add(newTweet(text,LocalDateTime.now()));}publicList<Tweet>getTimeline(){returnnewArrayList<>(tweets);//按时间倒序已存储}}classTweet{Stringtext;LocalDateTimetimestamp;publicTweet(Stringtext,LocalDateTimetimestamp){this.text=text;this.timestamp=timestamp;}}//示例publicclassWeiboSystem{publicstaticvoidmain(String[]args){Useralice=newUser("Alice");Userbob=newUser("Bob");Usercarol=newUser("Carol");alice.follow(bob);alice.follow(carol);bob.postTweet("Helloworld!");carol.postTweet("Hi@Alice");System.out.println("Alice的微博时间线:");for(Tweettweet:alice.getTimeline()){System.out.println(tweet.text+"("+tweet.timestamp+")");}}}解析:-`User`类存储用户信息、关注关系和微博列表。-`follow/unfollow`维护关注关系。-`getTimeline`按时间倒序返回微博。-实际系统需支持数据库和分布式缓存。四、数据库与存储(共2题,每题15分)1.题目(15分):请用SQL编写一个查询,统计每个用户的粉丝数量,并按粉丝数量降序排列。假设表名为`users`,字段包括`user_id`(用户ID)和`follower_id`(关注者ID)。答案:sqlSELECTuser_id,COUNT(follower_id)ASfollower_countFROM(SELECTDISTINCTuser_idASuser_id,follower_idFROMuse
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肛门闭锁术后营养支持护理要点
- 护理团队协作与沟通技巧
- 头发护理与个人形象塑造
- 医患关系核心目标解析
- 水利行业销售面试攻略
- 消防安全二十条实施指南
- 消防安全荣誉战行动指南
- 商铺消防安全管理指南
- 一年级消防安全主题绘画
- 考研面试高分方法论
- MOOC 物理与艺术-南京航空航天大学 中国大学慕课答案
- 银行案件复盘分析报告
- 分析方法转移方案课件
- 无创呼吸机面部压疮预防措施
- 全国高校黄大年式教师团队推荐汇总表
- 员工管理规章制度实施细则
- 社会心理学(西安交通大学)知到章节答案智慧树2023年
- 《安井食品价值链成本控制研究案例(论文)9000字》
- GB/T 4135-2016银锭
- GB/T 33084-2016大型合金结构钢锻件技术条件
- 关节镜肘关节检查法
评论
0/150
提交评论