软件工程师面试要点及答案解析.docxVIP

  • 1
  • 0
  • 约7.1千字
  • 约 20页
  • 2026-02-13 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年软件工程师面试要点及答案解析

一、编程能力测试(共5题,每题10分,总分50分)

1.题目:

编写一个函数,实现快速排序算法。输入一个整数数组,返回排序后的数组。

答案解析:

快速排序是一种分治算法,核心思想是选择一个基准值(pivot),将数组分成两部分,左边的元素都小于基准值,右边的元素都大于基准值,然后递归地对左右两部分进行排序。

python

defquick_sort(arr):

iflen(arr)=1:

returnarr

pivot=arr[len(arr)//2]

left=[xforxinarrifxpivot]

middle=[xforxinarrifx==pivot]

right=[xforxinarrifxpivot]

returnquick_sort(left)+middle+quick_sort(right)

解析:

-时间复杂度:平均O(nlogn),最坏O(n2)(当数组已经有序时)。

-空间复杂度:O(logn)(递归调用栈)。

-代码中使用了列表推导式简化了分割过程,实际面试中也可以使用原地分割以优化空间复杂度。

2.题目:

实现一个LRU(最近最少使用)缓存,支持get和put操作。

答案解析:

LRU缓存通过双向链表和哈希表实现,哈希表用于O(1)时间复杂度的查找,双向链表用于维护访问顺序。

python

classLRUCache:

def__init__(self,capacity:int):

self.capacity=capacity

self.cache={}

self.head,self.tail=Node(0,0),Node(0,0)

self.head.next=self.tail

self.tail.prev=self.head

classNode:

def__init__(self,key,value):

self.key=key

self.value=value

self.prev=None

self.next=None

defget(self,key:int)-int:

ifkeyinself.cache:

node=self.cache[key]

self._remove(node)

self._add(node)

returnnode.value

return-1

defput(self,key:int,value:int)-None:

ifkeyinself.cache:

self._remove(self.cache[key])

node=self.Node(key,value)

self.cache[key]=node

self._add(node)

iflen(self.cache)self.capacity:

lru=self.tail.prev

self._remove(lru)

delself.cache[lru.key]

def_remove(self,node):

delself.cache[node.key]

node.prev.next=node.next

node.next.prev=node.prev

def_add(self,node):

node.next=self.head.next

node.next.prev=node

self.head.next=node

node.prev=self.head

解析:

-时间复杂度:get和put操作均为O(1)。

-空间复杂度:O(capacity)。

-实现中,双向链表的头尾节点为哨兵节点,简化了插入和删除操作。

3.题目:

给定一个二叉树,判断其是否是平衡二叉树(左右子树高度差不超过1)。

答案解析:

通过递归计算每个节点的左右子树高度,若所有节点满足高度差不超过1,则为平衡二叉树。

python

classTreeNode:

def__init__(self,val=0,left=None,right=None):

self.val=val

self.left=left

self.right=right

defis_balanced(root:TreeNode)-bool:

defcheck(node):

ifnotnode:

return0

left_height=check(node.left)

right_

文档评论(0)

1亿VIP精品文档

相关文档