- 0
- 0
- 约9.55千字
- 约 30页
- 2026-01-07 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年技术精英面试宝典:常见问题与答案
一、编程语言与基础算法(15题,共60分)
1.题1(10分):
题目:
请用Python实现一个函数,输入一个正整数`n`,输出所有小于等于`n`的素数,要求时间复杂度尽可能低。
答案:
python
defsieve_of_eratosthenes(n):
ifn2:
return[]
is_prime=[True](n+1)
is_prime[0]=is_prime[1]=False
foriinrange(2,int(n0.5)+1):
ifis_prime[i]:
forjinrange(ii,n+1,i):
is_prime[j]=False
return[ifori,primeinenumerate(is_prime)ifprime]
解析:
使用埃拉托斯特尼筛法(SieveofEratosthenes),时间复杂度为O(nloglogn),优于暴力枚举法(O(n√n))。通过标记非素数来筛选出所有素数,空间复杂度为O(n)。
2.题2(5分):
题目:
解释什么是“时间复杂度”和“空间复杂度”,并举例说明O(1)、O(n)、O(logn)的时间复杂度分别适用于哪些场景。
答案:
时间复杂度描述算法执行时间随输入规模增长的变化趋势,常用大O表示法。
-O(1):常数时间,如数组访问`arr[i]`,适用于每次操作固定时间完成的场景。
-O(n):线性时间,如遍历数组,适用于单次遍历即可完成任务的场景。
-O(logn):对数时间,如二分查找,适用于可通过分治法快速减少搜索范围的场景。
空间复杂度描述算法内存占用随输入规模增长的变化趋势。
例如:
-O(1):原地算法(如快速排序原地分区)。
-O(n):需要额外存储空间(如哈希表)。
-O(logn):递归调用栈空间(如二分查找)。
3.题3(10分):
题目:
请用C++实现一个函数,输入一个字符串,返回该字符串中最长回文子串的长度。
答案:
cpp
includestring
usingnamespacestd;
intlongest_palindrome(conststrings){
if(s.empty())return0;
intstart=0,end=0;
for(inti=0;is.size();++i){
intlen1=expand_from_center(s,i,i);//奇数长度回文
intlen2=expand_from_center(s,i,i+1);//偶数长度回文
intmax_len=max(len1,len2);
if(max_lenend-start){
start=i-(max_len-1)/2;
end=i+max_len/2;
}
}
returnend-start+1;
}
intexpand_from_center(conststrings,intleft,intright){
while(left=0rights.size()s[left]==s[right]){
--left;
++right;
}
returnright-left-1;
}
解析:
通过双指针扩展中心点,分别处理奇数和偶数长度回文。时间复杂度为O(n2),空间复杂度为O(1)。可优化为O(n)的Manacher算法,但此处采用更直观的解法。
4.题4(5分):
题目:
解释“递归”与“迭代”的区别,并说明递归的局限性有哪些?
答案:
递归通过函数调用自身解决问题,适用于具有自相似结构的场景(如树的遍历)。
迭代使用循环控制流程,通常更节省内存(无调用栈开销)。
递归的局限性:
1.栈溢出:深度过大时会导致调用栈满。
2.性能开销:函数调用比循环慢(参数传递、返回值)。
3.重复计算:若未优化(如记忆化),可能导致大量冗余计算。
5.题5(10分):
题目:
请用Java实现一个函数,输入一个链表,返回其反转后的链表。
答案:
java
classListNode{
intval;
ListNodenext;
ListNode(){}
ListNode(intval){this.val=val;}
ListNode(intval,ListNodenext){this.val=val;this.ne
原创力文档

文档评论(0)