- 0
- 0
- 约5.08千字
- 约 14页
- 2026-01-30 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年工程师岗位面试题及项目实施案例含答案
一、编程语言与算法题(共5题,每题10分,总分50分)
1.题目:
请用Python实现一个函数,输入一个字符串,返回该字符串中所有重复字符及其出现次数。例如,输入`hello`,输出`{l:2,o:1}`。要求时间复杂度O(n),空间复杂度O(1)。
答案:
python
defcount_duplicates(s:str)-dict:
ifnots:
return{}
counts={}
forcharins:
counts[char]=counts.get(char,0)+1
return{char:countforcharincountsifcount1}
解析:
使用哈希表(字典)统计字符频率,遍历一次字符串(O(n)),最后过滤掉只出现一次的字符(O(n)),总体时间复杂度仍为O(n)。空间复杂度为O(1),因为输入字符串的字符集是有限的(如ASCII字符集)。
2.题目:
给定一个整数数组,返回所有和为给定目标值的连续子数组的起始和结束索引。例如,输入`[1,2,3,4,5]`和目标值`9`,输出`[(2,4),(1,3)]`。
答案:
python
defsubarray_sum(nums,target):
result=[]
left=0
current_sum=0
forrightinrange(len(nums)):
current_sum+=nums[right]
whilecurrent_sumtargetandleft=right:
current_sum-=nums[left]
left+=1
ifcurrent_sum==target:
result.append((left,right))
returnresult
解析:
滑动窗口法,双指针移动,保持窗口内和小于等于目标值。当和超过目标值时,移动左指针缩小窗口。时间复杂度O(n),空间复杂度O(1)。
3.题目:
请用Java实现二叉树的深度优先遍历(前序、中序、后序),并分别输出遍历结果。假设树的节点定义如下:
java
classTreeNode{
intval;
TreeNodeleft;
TreeNoderight;
TreeNode(intx){val=x;}
}
答案:
java
//前序遍历
voidpreorder(TreeNoderoot){
if(root==null)return;
System.out.print(root.val+);
preorder(root.left);
preorder(root.right);
}
//中序遍历
voidinorder(TreeNoderoot){
if(root==null)return;
inorder(root.left);
System.out.print(root.val+);
inorder(root.right);
}
//后序遍历
voidpostorder(TreeNoderoot){
if(root==null)return;
postorder(root.left);
postorder(root.right);
System.out.print(root.val+);
}
解析:
递归法实现三叉树遍历,前序根左右,中序左根右,后序左右根。时间复杂度O(n),空间复杂度O(h)(h为树的高度)。
4.题目:
请用C++实现快速排序算法,并说明其平均时间复杂度和最坏情况下的时间复杂度。
答案:
cpp
includevector
usingnamespacestd;
intpartition(vectorintnums,intleft,intright){
intpivot=nums[right];
inti=left-1;
for(intj=left;jright;j++){
if(nums[j]=pivot){
i++;
swap(nums[i],nums[j]);
}
}
swap(nums[i+1],nums[right]);
returni+1;
}
voidquicksort(vectorintnums,intleft,intright){
if(leftright){
intpivot=partition(nums,le
原创力文档

文档评论(0)