版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年程序员面试问题集含答案一、编程语言基础(5题,每题10分,共50分)题目1(Java)javapublicclassStringTest{publicstaticvoidmain(String[]args){Strings1="hello";Strings2="hello";Strings3=newString("hello");Strings4=newString("hello");System.out.println(s1==s2);//输出什么?System.out.println(s1==s3);//输出什么?System.out.println(s3==s4);//输出什么?System.out.println(s1.equals(s3));//输出什么?}}答案:truefalsefalsetrue解析:-`s1==s2`输出`true`,因为Java中字符串常量池会缓存相同的字符串字面量,所以`s1`和`s2`指向同一块内存-`s1==s3`输出`false`,虽然内容相同,但`s1`是字符串常量池中的对象引用,而`s3`是堆中新建的对象-`s3==s4`输出`false`,即使是两个新创建的相同字符串,它们也是不同的对象,有独立的内存地址-`s1.equals(s3)`输出`true`,因为`equals()`方法比较的是字符串内容是否相同题目2(Python)pythondeffunc(a,b=10):print(a,b)func(1)#会输出什么?func(b=2,a=3)#会输出什么?func(4,5)#会输出什么?答案:1103245解析:-第一个调用`func(1)`时,只传了`a`参数,`b`使用默认值10,输出`110`-第二个调用`func(b=2,a=3)`时,使用了关键字参数,`a=3`,`b=2`,输出`32`-第三个调用`func(4,5)`时,位置参数`4`赋给`a`,`5`赋给`b`,输出`45`题目3(C++)cppinclude<iostream>usingnamespacestd;intmain(){intx=5;intp1=&x;intp2=p1;p1=10;p1=p2;cout<<x<<endl;cout<<p1<<endl;cout<<p2<<endl;return0;}答案:101010解析:-首先定义变量`x`并赋值为5,`p1`指向`x`的地址-`p2`被赋值为`p1`的值,即`p2`也指向`x`的地址-`p1=10;`修改了`x`的值为10-`p1=p2;`将`p1`和`p2`指向同一地址,但这个赋值不影响`x`的值-因此所有输出都是10题目4(JavaScript)javascriptletarr1=[1,2,3];letarr2=[4,5,6];letarr3=arr1;arr1=arr2;arr2[0]=40;console.log(arr1[0]);//输出什么?console.log(arr3[0]);//输出什么?答案:401解析:-`arr3`是`arr1`的引用复制,所以`arr3`和`arr1`指向同一数组-`arr1=arr2;`将`arr1`的引用改为指向`arr2`所指向的数组-`arr2[0]=40;`修改了`arr2`指向的数组第一个元素为40-因此`arr1[0]`输出40-`arr3`仍然指向原始的`[1,2,3]`数组,所以`arr3[0]`输出1题目5(Go)gopackagemainimport"fmt"funcmain(){a:=[]int{1,2,3}b:=aa=append(a,4,5)b[0]=10fmt.Println(len(a))//输出什么?fmt.Println(len(b))//输出什么?fmt.Println(cap(a))//输出什么?fmt.Println(cap(b))//输出什么?}答案:53106解析:-`b=a`是切片的引用赋值,`b`和`a`指向同一个底层数组-`a=append(a,4,5)`修改了`a`指向的新数组,长度变为5,容量增加到10(因为append可能需要扩容)-`b[0]=10`修改了原始数组的第一个元素为10-`len(a)`是`a`的长度5-`len(b)`是`b`的长度3(原始长度)-`cap(a)`是`a`的容量10(扩容后)-`cap(b)`是`b`的容量6(原始容量)二、数据结构与算法(10题,每题10分,共100分)题目6(链表)设计一个单链表,实现删除重复元素的函数。例如,输入1->2->3->3->2->1,返回1->2->3。答案:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefdeleteDuplicates(head):ifnothead:returnheaddummy=ListNode(0)dummy.next=headprev=dummycurrent=headwhilecurrent:ifcurrent.nextandcurrent.val==current.next.val:删除所有重复节点whilecurrent.nextandcurrent.val==current.next.val:current=current.nextprev.next=current.next#删除重复节点else:prev=prev.nextcurrent=current.nextreturndummy.next解析:-使用dummy节点简化边界条件处理-维护两个指针prev和current,prev指向当前不重复部分的最后一个节点-当发现重复元素时,移动current跳过所有重复节点,然后断开连接-时间复杂度O(n),空间复杂度O(1)题目7(二叉树)给定一个二叉搜索树,找到该树中第k小的元素。例如,输入root=[3,1,4,null,2],k=1,返回1。答案:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefkthSmallest(root,k):stack=[]current=rootwhilestackorcurrent:whilecurrent:stack.append(current)current=current.leftcurrent=stack.pop()k-=1ifk==0:returncurrent.valcurrent=current.rightreturnNone#如果k大于节点总数解析:-利用二叉搜索树的性质:中序遍历结果是有序的-使用迭代实现中序遍历,而不是递归-当k减到0时,当前节点就是第k小的元素-时间复杂度O(h+k),空间复杂度O(h),h是树的高度题目8(动态规划)给你一个整数数组nums和一个整数目标值target,请找出nums中和为目标值target的两个数,并返回它们的数组下标。你可以假设每个输入都只有一组解,并且不能重复使用同一个元素。答案:pythondeftwoSum(nums,target):num_to_index={}fori,numinenumerate(nums):complement=target-numifcomplementinnum_to_index:return[num_to_index[complement],i]num_to_index[num]=ireturn[]#如果没有解解析:-使用哈希表记录每个数字及其索引-遍历数组时,检查target减去当前数字的值是否已在哈希表中-如果存在,返回对应索引;否则将当前数字加入哈希表-时间复杂度O(n),空间复杂度O(n)题目9(堆)实现一个优先队列(最小堆),支持插入元素和获取最小元素的操作。答案:pythonclassMinHeap:def__init__(self):self.heap=[]defparent(self,i):return(i-1)//2defleft(self,i):return2i+1defright(self,i):return2i+2definsert(self,val):self.heap.append(val)self.heapify_up(len(self.heap)-1)defheapify_up(self,i):whilei!=0andself.heap[self.parent(i)]>self.heap[i]:self.heap[i],self.heap[self.parent(i)]=self.heap[self.parent(i)],self.heap[i]i=self.parent(i)defextract_min(self):ifnotself.heap:returnNoneiflen(self.heap)==1:returnself.heap.pop()root=self.heap[0]self.heap[0]=self.heap.pop()self.heapify_down(0)returnrootdefheapify_down(self,i):size=len(self.heap)whileTrue:left=self.left(i)right=self.right(i)smallest=iifleft<sizeandself.heap[left]<self.heap[smallest]:smallest=leftifright<sizeandself.heap[right]<self.heap[smallest]:smallest=rightifsmallest!=i:self.heap[i],self.heap[smallest]=self.heap[smallest],self.heap[i]i=smallestelse:break解析:-最小堆实现中,父节点始终小于或等于子节点-插入操作:添加到数组末尾,然后上浮调整-弹出最小值:交换根节点和最后一个节点,然后下浮调整-时间复杂度:插入O(logn),弹出O(logn)-空间复杂度:O(n)题目10(递归)递归实现快速排序算法。答案:pythondefquicksort(arr):iflen(arr)<=1:returnarrpivot=arr[len(arr)//2]left=[xforxinarrifx<pivot]middle=[xforxinarrifx==pivot]right=[xforxinarrifx>pivot]returnquicksort(left)+middle+quicksort(right)解析:-选择中间元素作为基准(pivot)-将数组分为小于、等于、大于基准的三部分-递归对小于和大于基准的部分进行排序-合并结果:sorted(left)+middle+sorted(right)-时间复杂度:平均O(nlogn),最坏O(n²)-空间复杂度:O(logn)(递归栈)题目11(图算法)给定一个无向图,用邻接矩阵表示,实现深度优先搜索(DFS)遍历。答案:pythondefdfs(matrix,start):n=len(matrix)visited=[False]nresult=[]defvisit(node):visited[node]=Trueresult.append(node)foriinrange(n):ifmatrix[node][i]==1andnotvisited[i]:visit(i)visit(start)returnresult解析:-DFS使用递归实现-访问当前节点,标记为已访问,加入结果-对所有未访问的相邻节点递归调用DFS-邻接矩阵中1表示两个节点之间有边-时间复杂度O(V+E),V是顶点数,E是边数-空间复杂度O(V),用于存储访问状态和递归栈题目12(贪心算法)给定一个非负整数数组nums,你需要在数组中找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。答案:pythondefmaxSubArray(nums):ifnotnums:return0max_sum=current_sum=nums[0]fornuminnums[1:]:current_sum=max(num,current_sum+num)max_sum=max(max_sum,current_sum)returnmax_sum解析:-贪心策略:当前最大子数组和要么是当前元素本身,要么是当前元素加上之前的最大子数组和-初始化时,最大和和当前和都是第一个元素-遍历数组,更新当前和和最大和-最终最大和就是所求的最大子数组和-时间复杂度O(n),空间复杂度O(1)题目13(字符串处理)实现一个函数,检查一个字符串是否是有效的括号组合。例如,输入"()[]{}",输出true;输入"(]",输出false。答案:pythondefisValid(s):stack={'(':')','{':'}','[':']'}open_chars=set(stack.keys())close_chars=set(stack.values())ifnots:returnTrueifs[0]notinopen_charsors[-1]notinclose_chars:returnFalsestack=[]forcharins:ifcharinopen_chars:stack.append(char)elifcharinclose_chars:ifnotstackorstack.pop()!=stack_chars[char]:returnFalsereturnnotstack解析:-使用栈来匹配括号-遍历字符串,遇到开括号入栈,遇到闭括号检查栈顶是否匹配-最后栈应为空表示所有括号匹配-时间复杂度O(n),空间复杂度O(n)题目14(树遍历)实现二叉树的层序遍历(广度优先搜索)。答案:pythonfromcollectionsimportdequeclassTreeNode:def__init__(self,val=0,left
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 白银有色产业集团招聘面试题及答案
- 胶印版材工艺工安全培训效果水平考核试卷含答案
- 实验动物繁殖员安全培训效果知识考核试卷含答案
- 北京市北京二中教育集团2026届语文高三上期末统考模拟试题含解析
- 光缆护套工创新实践水平考核试卷含答案
- 2026届新疆昌吉州第二中学生物高一上期末质量跟踪监视模拟试题含解析
- 《初中历史新课标主题探究活动设计》
- 22025四川达州市金鼎鑫贸易有限公司公开招聘招商专业人员4人笔试参考题库附带答案详解(3卷)
- 2025江西省港航建设投资集团有限公司信江航运枢纽分公司招聘2人劳务外包员工笔试参考题库附带答案详解(3卷)
- 2025年度绍兴滨海新区国有企业第四批招聘笔试参考题库附带答案详解(3卷)
- 2026年高考数学复习策略讲座
- 大数据与人工智能导论(厦门大学)学习通网课章节测试答案
- 土石坝除险加固设计规范(2025版)
- 移动卫星通信终端创新创业项目商业计划书
- 前期物业服务招标投标管理办法
- 危重症患者体温管理课件
- 033《知识产权法》电大期末考试题库及答案
- 中医消防安全知识培训课件
- 多发性骨髓瘤的个案护理
- 洗胃操作并发症及预防
- 绿色建筑可行性分析报告
评论
0/150
提交评论