MAXN = 8
data = [0] * MAXN
front = 0
rear = 0
def full():
return ________
2分
登录后查看选项
06
下列函数属于二叉树哪一种遍历?
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def visit(root):
if root is None:
return
visit(root.left)
print(root.val, end=" ")
visit(root.right)
2分
登录后查看选项
07
已知一棵二叉树的先序遍历序列为 A B D E C F ,中序遍历序列为 D B E A C F ,则其后序遍历序列是 ( )。
2分
登录后查看选项
08
下面函数用来计算二叉树的高度,横线处应填写?
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def height(root):
if root is None:
return 0
leftH = height(root.left)
rightH = height(root.right)
return ________
2分
登录后查看选项
09
下面代码实现二叉树深度优先搜索 (迭代版前序遍历),横线处应当填写?
class TreeNode:
def __init__(self, val):
self.value = val
self.left = None
self.right = None
def dfs(root):
if root is None:
return
s = []
s.append(root)
while len(s) > 0:
node = s.pop()
print(node.value, end=" ")
# --------此处填空--------
2分
登录后查看选项
10
下面函数用于在二叉搜索树里面查找数值 x ,横线处应当填写?
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def searchBST(root, x):
if root is None or root.val == x:
return root
if x < root.val:
return searchBST(root.left, x)
____________
def gray(n):
ans = ["0", "1"]
for bit in range(2, n + 1):
oldSize = len(ans)
for i in range(oldSize - 1, -1, -1):
ans.append(_______________)
for i in range(oldSize):
ans[i] = "0" + ans[i]
return ans
2分
登录后查看选项
13
下面代码计算爬到第 n 级台阶的方案数,每次可以跨 1 级或者 2 级台阶,横线处应填写?
def ways(n):
if n <= 2:
return n
dp = [0] * (n + 1)
dp[1] = 1
dp[2] = 2
for i in range(3, n + 1):
dp[i] = ________
return dp[n]
2分
登录后查看选项
14
代码求解:从包含非负元素的数组选取若干互不相邻的元素,得到最大和,横线处填写?
def maxSum(a):
n = len(a)
if n == 0:
return 0
if n == 1:
return a[0]
dp = [0] * n
dp[0] = a[0]
dp[1] = max(a[0], a[1])
for i in range(2, n):
dp[i] = ________
return dp[-1]
2分
登录后查看选项
15
下面是一维数组实现的 0/1 背包,内层循环必须从大到小枚举容量,主要原因是?
# n物品数量,W背包总容量
for i in range(n):
w = W
while w >= weight[i]:
dp[w] = max(dp[w], dp[w - weight[i]] + value[i])
w -= 1
2分
登录后查看选项
判断题 共10道
16
下面这段描述:代码可以运行时出错,编译器会自动为 Student 生成无参构造函数。
class Student:
def __init__(self, x):
self.age = x
def main():
s = Student() # 尝试调用无参构造
main()
2分
登录后查看选项
17
下面代码是合法的,派生类可以直接访问基类的私有成员 value 。
class Base:
def __init__(self):
self.__value = 10
class Child(Base):
def get(self):
return self.__value
c = Child()
c.get()
from collections import deque
# tree为邻接表
def search(start, tree):
n = 100
visited = [False] * n
dist = [0] * n
q = deque()
q.append(start)
visited[start] = True
dist[start] = 0
while q:
u = q.popleft()
for v in tree[u]:
if not visited[v]:
visited[v] = True
dist[v] = dist[u] + 1
q.append(v)
2分
登录后查看选项
22
哈夫曼编码的生成过程基于贪心算法,出现频率越高的字符,其编码长度一定不会比出现频率更低的字符更长。
2分
登录后查看选项
23
在 n 位格雷码中,任意两个编码之间都只相差一个二进制位。
2分
登录后查看选项
24
下列一维 DP 代码实现的是完全背包问题,处理第 i 种物品时,同一件物品有可能被重复选取。
for i in range(n):
w = weight[i]
while w <= W:
dp[w] = max(dp[w], dp[w - weight[i]] + value[i])
w += 1
2分
登录后查看选项
25
下面递归函数可以算出正确的斐波那契数值,该代码时间复杂度与空间复杂度均为 O (n)。
def fib(n):
if n <= 1:
return n
return fib(n - 1) + fib(n - 2)
2分
登录后查看选项
编程题 共2道
26
数组划分
题目描述
给定 n 个整数构成的数组 A=[a1,a2,...,an]。
你需要将数组 A 划分为若干非空连续子段。对于划分得到的某个子段,它的偏差值定义为子段内整数和的平方。划
分方案的偏差值定义为所有子段偏差值之和。
你需要最小化划分方案的偏差值。
形式化地,你可以将 A 划分为若干非空连续子段A1,A2,...,Ak,使得A=A1十A2十...Ak,这里的 + 代表数组的连接。对于 1≤i≤k,设数组包含 mi 个整数。你需要最小化 。