2026年北京大学计算机研发岗面试题.docxVIP

  • 0
  • 0
  • 约4.88千字
  • 约 13页
  • 2026-02-11 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年北京大学计算机研发岗面试题

一、编程题(3题,每题20分,共60分)

1.编写一个函数,实现快速排序算法。

要求:

-输入一个整数数组,返回排序后的数组。

-不能使用现成的排序库函数,需手动实现。

-示例输入:`[3,1,4,1,5,9,2,6,5,3,5]`,输出:`[1,1,2,3,3,4,5,5,5,6,9]`。

答案与解析:

答案:

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)

示例

print(quick_sort([3,1,4,1,5,9,2,6,5,3,5]))

解析:

快速排序的核心是分治思想。选择一个基准值(pivot),将数组分成三部分:小于基准值的、等于基准值的、大于基准值的。然后对左右两部分递归排序。时间复杂度为O(nlogn),空间复杂度为O(logn)。注意:题目要求不使用现成库函数,因此手动实现分治逻辑。

2.编写一个函数,检查一个字符串是否是回文串。

要求:

-忽略大小写和非字母数字字符。

-示例输入:`Aman,aplan,acanal:Panama`,输出:`True`。

-示例输入:`raceacar`,输出:`False`。

答案与解析:

答案:

python

defis_palindrome(s:str)-bool:

s=.join(c.lower()forcinsifc.isalnum())

returns==s[::-1]

示例

print(is_palindrome(Aman,aplan,acanal:Panama))#True

print(is_palindrome(raceacar))#False

解析:

回文串指正读反读都相同的字符串。首先,去除非字母数字字符并转换为小写,然后比较处理后的字符串是否对称。时间复杂度为O(n),空间复杂度为O(n)。另一种方法是双指针法,从两端向中间遍历,但这里用切片更简洁。

3.编写一个函数,实现二叉树的层序遍历(广度优先遍历)。

要求:

-输入一个二叉树的根节点,返回按层序排列的节点值列表。

-示例输入:

python

二叉树结构

classTreeNode:

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

self.val=val

self.left=left

self.right=right

输入:`[3,9,20,None,None,15,7]`(对应二叉树),输出:`[[3],[9,20],[15,7]]`。

答案与解析:

答案:

python

fromcollectionsimportdeque

classTreeNode:

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

self.val=val

self.left=left

self.right=right

deflevel_order(root:TreeNode)-list:

ifnotroot:

return[]

result=[]

queue=deque([root])

whilequeue:

level=[]

for_inrange(len(queue)):

node=queue.popleft()

level.append(node.val)

ifnode.left:

queue.append(node.left)

ifnode.right:

queue.append(node.right)

result.append(level)

returnresult

示例

root=TreeNode(3)

root.left=TreeNode(9)

root.right=TreeNode(20,TreeNode(15),TreeNode(7))

print(level_order(root))#

文档评论(0)

1亿VIP精品文档

相关文档