- 0
- 0
- 约5.59千字
- 约 16页
- 2026-02-09 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年全栈开发工程师算法面试题解析
一、编程语言基础(共3题,每题10分)
题目1:
请用Python实现一个函数,输入一个正整数n,返回其二进制表示中1的个数。例如,输入5(二进制为101),返回2。
答案:
python
defcount_bits(n):
returnbin(n).count(1)
解析:
`bin(n)`将数字转换为二进制字符串,如`bin(5)`返回`0b101`,然后`count(1)`统计其中1的个数。时间复杂度为O(1),因为二进制位数与n的对数成正比。
题目2:
用JavaScript实现一个函数,输入一个字符串,返回该字符串中所有唯一字符的集合。例如,输入`hello`,返回`[e,h,l,o]`。
答案:
javascript
functionuniqueChars(str){
constcharSet=newSet();
constseen=newSet();
for(constcharofstr){
if(!seen.has(char)){
charSet.add(char);
seen.add(char);
}
}
returnArray.from(charSet);
}
解析:
使用两个集合`charSet`和`seen`,前者存储唯一字符,后者防止重复添加。遍历字符串时,若字符未出现过,则加入两个集合。时间复杂度为O(n),空间复杂度为O(n)。
题目3:
用Java实现一个方法,输入一个整数数组,返回数组中所有奇数数字的平方和。例如,输入`[1,2,3]`,返回`12+32=10`。
答案:
java
publicstaticintsumOfOddSquares(int[]arr){
intsum=0;
for(intnum:arr){
if(num%2!=0){
sum+=numnum;
}
}
returnsum;
}
解析:
遍历数组,判断每个数字是否为奇数,若是则平方后累加。时间复杂度为O(n),空间复杂度为O(1)。
二、数据结构(共4题,每题12分)
题目4:
请用C++实现一个函数,输入一个链表,返回链表中中间节点的值。假设链表节点数为奇数。
答案:
cpp
structListNode{
intval;
ListNodenext;
ListNode(intx):val(x),next(nullptr){}
};
intfindMiddle(ListNodehead){
ListNodeslow=head,fast=head;
while(fastfast-next){
slow=slow-next;
fast=fast-next-next;
}
returnslow-val;
}
解析:
快慢指针法:快指针每次移动两步,慢指针移动一步,当快指针到达末尾时,慢指针位于中间。时间复杂度为O(n),空间复杂度为O(1)。
题目5:
用Python实现一个函数,输入一个非空二叉树,返回其最大宽度。宽度定义为树中同一层最左和最右节点之间的距离。
答案:
python
fromcollectionsimportdeque
classTreeNode:
def__init__(self,val=0,left=None,right=None):
self.val=val
self.left=left
self.right=right
defmaxWidth(root):
ifnotroot:
return0
queue=deque([(root,0)])
max_width=0
whilequeue:
level_length=len(queue)
_,first=queue[0]
for_inrange(level_length):
node,index=queue.popleft()
ifnode.left:
queue.append((node.left,2index+1))
ifnode.right:
queue.append((node.right,2index+2))
max_width=max(max_width,index)
returnmax_width+1
解析:
层序遍历,使用队列存储节点及其索引(根为0),每层记录最右索引减最左索引加1。时间复杂度为O(n),空间复杂度为O(n)。
题目6:
用Java实现一个方法,输入一个栈,通过仅使用另一
原创力文档

文档评论(0)