下面的python代码实现给定单链表头结点 head 和一个整数 val ,删除链表中所有结点值等于 val 的节点,并返回新的头结点,则横线处填写( )。
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def removeElements(head: ListNode, val: int) -> ListNode:
dummy = ListNode(0, head)
cur = dummy
while cur.next:
if cur.next.val == val:
__________________________
del del_node
else:
cur = cur.next
return dummy.next
2分
登录后查看选项
03
下列python代码用Floyd判断一个单链表中是否存在环,链表的头节点为 head ,即用两个指针在链表上前进: slow 每次走 1 步, fast 每次走 2 步,若存在环, fast 终会追上 slow (相遇);若无环, fast 会先到达 nullptr。横线上应填写( )。
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def hasCycle(head: ListNode) -> bool:
if not head or not head.next:
return False
slow = head
fast = head.next
while fast and fast.next:
if slow == fast:
return True
_________________
return False
def isPerfectNumber(n: int) -> bool:
if n <= 1:
return False
sum = 1
i = 2
while i * i <= n:
if n % i == 0:
sum += i
_______________
sum += n // i
i += 1
return sum == n
2分
登录后查看选项
05
以下代码计算两个数的最大公约数(GCD),横线上应填写( )。
def gcd(a: int, b: int) -> int:
if a < b:
a, b = b, a # 交换a和b的值
while b != 0:
temp = a % b
a = b
b = temp
return _________
2分
登录后查看选项
06
下面的代码实现埃拉托斯特尼筛法(埃氏筛),横线处应填入( )。
def sieve(n: int):
is_prime = [True] * (n + 1)
is_prime[0] = is_prime[1] = False
for i in range(2, n + 1):
if is_prime[i]:
for j in range(______, n + 1, i):
is_prime[j] = False
return is_prime
2分
登录后查看选项
07
下面的代码实现线性筛法(欧拉筛),横线处应填入( )。
def linearSieve(n: int):
is_prime = [True] * (n + 1)
primes = []
for i in range(2, n + 1):
if is_prime[i]:
primes.append(i)
for p in primes:
if p * i > n:
break
is_prime[p * i] = False
if _____________:
break
return primes
2分
登录后查看选项
08
线性筛算法中有语句 if p * i > n: break ,其目的是( )。
2分
登录后查看选项
09
唯一分解定理描述的是( )。
2分
登录后查看选项
10
给定一个 n x n 的矩阵 matrix ,矩阵的每一行和每一列都按升序排列。下面代码返回矩阵中第 k 小的元素,则两处横线上应分别填写( )。
def countLE(matrix, x):
n = len(matrix)
i, j = n - 1, 0
cnt = 0
while i >= 0 and j < n:
if matrix[i][j] <= x:
cnt += i + 1
j += 1
else:
i -= 1
return cnt
def kthSmallest(matrix, k):
n = len(matrix)
lo = matrix[0][0]
hi = matrix[n-1][n-1]
while lo < hi:
mid = lo + (hi - lo) // 2
if countLE(matrix, mid) >= k:
________
else:
________
return lo
2分
登录后查看选项
11
下述python代码实现了快速排序算法,下面说法错误的是( )。
def partition(arr, low, high):
i, j = low, high
while i < j:
while i < j and arr[j] >= arr[low]:
j -= 1
while i < j and arr[i] <= arr[low]:
i += 1
arr[i], arr[j] = arr[j], arr[i]
arr[i], arr[low] = arr[low], arr[i]
return i
def quickSort(arr, low, high):
if low < high:
pivot = partition(arr, low, high)
quickSort(arr, low, pivot - 1)
quickSort(arr, pivot + 1, high)
2分
登录后查看选项
12
下述python代码实现了归并排序算法,则横线上应填写( )。
def merge(nums, left, mid, right):
tmp = []
i, j = left, mid + 1
while i <= mid and j <= right:
if nums[i] <= nums[j]:
tmp.append(nums[i])
i += 1
else:
tmp.append(nums[j])
j += 1
while i <= mid:
tmp.append(nums[i])
i += 1
while ___________:
tmp.append(nums[j])
j += 1
for k in range(len(tmp)):
nums[left + k] = tmp[k]
def mergeSort(nums, left, right):
if left >= right:
return
mid = (left + right) // 2
mergeSort(nums, left, mid)
mergeSort(nums, mid + 1, right)
merge(nums, left, mid, right)
# 使用示例
if __name__ == "__main__":
nums = [3, 1, 4, 1, 5, 9, 2, 6]
mergeSort(nums, 0, len(nums) - 1)
print(nums) # 输出排序后的数组
2分
登录后查看选项
13
假设你是一家电影院的排片经理,只有一个放映厅。你有一个电影列表 movies ,其中 movies[i] =[start_i, end_i] 表示第 i 部电影的开始和结束时间。请你找出最多能安排多少部不重叠的电影,则横线上应分别填写的代码为( )。
def maxMovies(movies):
if not movies:
return 0
# 按照结束时间排序
movies.sort(key=lambda x: x[1])
count = 1
_____________ = movies[0][1]
for i in range(1, len(movies)):
if movies[i][0] >= lastEnd:
count += 1
lastEnd = movies[i][1]
return count