- 0
- 0
- 约6.59千字
- 约 17页
- 2026-02-03 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年软件开发工程师面试常见问题及答案解析
一、编程基础与数据结构(共5题,每题10分,总分50分)
1.题目:
请实现一个函数,输入一个整数数组,返回其中所有相加和为给定目标和的三个整数,且这三个整数不能完全相同。例如,输入`[1,2,3,4,5]`和目标和`9`,返回`[1,2,6]`或`[2,3,4]`。
答案:
python
defthree_sum(nums,target):
nums.sort()
n=len(nums)
foriinrange(n-2):
ifi0andnums[i]==nums[i-1]:
continue
left,right=i+1,n-1
whileleftright:
total=nums[i]+nums[left]+nums[right]
iftotal==target:
return[nums[i],nums[left],nums[right]]
eliftotaltarget:
left+=1
else:
right-=1
return[]
示例调用
print(three_sum([1,2,3,4,5],9))#输出[1,2,6]或[2,3,4]
解析:
-先对数组排序,便于使用双指针法。
-遍历时跳过重复元素,避免结果重复。
-使用双指针(left和right)滑动查找满足条件的三个数。
-时间复杂度:O(n2),空间复杂度:O(1)。
2.题目:
请解释二叉搜索树(BST)的中序遍历过程,并给出递归和非递归的实现代码。
答案:
中序遍历顺序:左子树→根节点→右子树。
python
递归实现
definorder_traversal_recursive(root):
ifnotroot:
return[]
returninorder_traversal_recursive(root.left)+[root.val]+inorder_traversal_recursive(root.right)
非递归实现
definorder_traversal_iterative(root):
stack,result=[],[]
current=root
whilestackorcurrent:
whilecurrent:
stack.append(current)
current=current.left
current=stack.pop()
result.append(current.val)
current=current.right
returnresult
解析:
-递归通过函数调用栈实现,非递归使用显式栈。
-时间复杂度:O(n),空间复杂度:递归为O(h),非递归为O(n)。
3.题目:
给定一个无重复的整数数组,返回所有可能的子集(包括空集)。
答案:
python
defsubsets(nums):
result=[]
nums.sort()
defbacktrack(start,path):
result.append(path.copy())
foriinrange(start,len(nums)):
path.append(nums[i])
backtrack(i+1,path)
path.pop()
backtrack(0,[])
returnresult
示例调用
print(subsets([1,2,3]))#输出[[],[1],[1,2],[1,2,3],[1,3],[2],[2,3],[3]]
解析:
-使用回溯算法,通过递归构建所有子集。
-时间复杂度:O(2^n),空间复杂度:O(n)。
4.题目:
请解释哈希表的冲突解决方法(链地址法和开放地址法),并说明各自优缺点。
答案:
-链地址法:将哈希值相同的元素存储在同一个链表中。
-优点:空间利用率高,可动态扩容。
-缺点:查找效率受链表长度影响。
-开放地址法:当冲突发生时,按一定规则(如线性探测、二次探测)寻找下一个空槽。
-优点:实现简单,无需额外空间。
-缺点:易产生聚集,影响性能。
5.题目:
请实现一个LRU(最近最少使用)缓存,支持`get`和`put`操作。
答案:
python
classLRUCache:
def__init__(self,capacity:int):
self.capacit
原创力文档

文档评论(0)