小杨使用单向链表存放任务序列,同时记录链表的头部结点 head 和尾部结点 tail。链表不为空,已知尾部结点 tail,在链表末尾添加新结点的时间复杂度是 ( )。
class Node:
def __init__(self, val):
self.value = val
self.next = None
head: Node | None
tail: Node | None
2分
登录后查看选项
02
在不带哨兵结点的双向链表中,结点 p 既不是头部结点,也不是尾部结点。删除结点 p 的正确代码是 ( )。
class Node:
def __init__(self, val):
self.value = val
self.prev = None # 指向前面结点
self.next = None # 指向后面结点
2分
登录后查看选项
03
下面函数使用快慢变量查找单向链表的中间结点。横线处应填写 ( )
class Node:
def __init__(self, val):
self.value= val
self.next=None
def middle(head):
slow=head
fast = head
while fast is not None and fast.next is not None:
slow = slow.next
__________
return slow
2分
登录后查看选项
04
函数 gcd (a,b) 定义如下,则 gcd (105,45) 的结果是 ()。
def gcd(a,b):
if b==0:
return a
else:
return gcd(b,a%b)
2分
登录后查看选项
05
下面函数用于判断正整数 n 是否为质数。横线处的最佳写法是 ()。
def isPrime(n):
if n<2:
return False
i=2
while __________:
if n%i==0:
return False
i +=1
return True
2分
登录后查看选项
06
下面代码实现线性筛 (欧拉筛)。为保证每个合数只被它的最小质因子筛除一次,横线处应填写 ( )
def linear_sieve (n):
composite =[False]*(n + 1)
primes=[]
for i in range(2, n +1):
if not composite[i]:
primes.append(i)
for p in primes:
if i*p>n:
break
composite[i *p]= True
if __________:
break
return primes
2分
登录后查看选项
07
根据唯一分解定理,整数 756 的正确质因数分解是 ( )。
2分
登录后查看选项
08
函数 f (n) 定义如下,则 f (4) 的结果是 ()。
def f(n):
if n==1:
return 1
return n +f(n -1)
2分
登录后查看选项
09
在升序数组中查找第一个严格大于 x 的元素下标,下面代码横线处应填写 ()。
def upper_bound(a,x):
l=0
r=len(a)
while l < r:
mid =l+(r -l)//2
if __________:
l=mid+1
else:
r=mid
return l
2分
登录后查看选项
10
小杨需要把若干箱货物按原有顺序分配到 days 天中,每天运输连续的若干箱,求可以完成任务的最小载重量。函数 check (cap) 判断载重量为 cap 时,是否可以在规定天数运完全部货物。横线处应填写 ()
l =maxWeight
r = totalWeight
while l <r:
mid = l + (r -l) //2
if check(mid):
________
else:
________
print(l)
def maxSubArray(a):
best = a[0]
current = a[0]
for i in range(1, len(a)):
current = max(a[i], current + a[i])
best = max(best, current)
return best
2分
登录后查看选项
15
数组 a 和 b 低位在前存储两个非负大整数,代码实现高精度加法,横线处应填写 ( )
def add(a, b):
c = []
carry = 0
n = max(len(a), len(b))
for i in range(n):
sum_val = carry
if i < len(a):
sum_val += a[i]
if i < len(b):
sum_val += b[i]
c.append(sum_val % 10)
__________
if carry != 0:
c.append(carry)
return c
2分
登录后查看选项
判断题 共10道
16
下面代码,在已知结点 p 的前提下,可以用O(1)的时间,在单向链表的 p 结点后面插入新结点 s。
s.next=p.next
p.next=s
2分
登录后查看选项
17
下面代码可以安全删除单向链表的头结点,并让 head 指向删除之后的新头结点。
p = head
head=p.next
2分
登录后查看选项
18
下面的欧几里得算法,只要 a、b 是正整数,无论 a>b 还是 a<b 都可以正常求出最大公约数。
def gcd(a,b):
while b!=0:
r=a%b
a=b
b=r
return a
2分
登录后查看选项
19
下面埃氏筛从 i*i 开始标记合数,原因是:i*i 之前 i 的合数倍数,已经被更小的质因子标记完成。
def sieve(n):
isPrime =[True]*(n +1)
isPrime[0]= isPrime[1]= False
i=2
while i *i<=n:
if isPrime[i]:
j=i*i
while j <= n:
isPrime[j]= False
j+=i
i+=1
return isPrime
2分
登录后查看选项
20
下面程序的时间复杂度为 O(n)。
i=1
while i<=n:
print(i)
i*=2
2分
登录后查看选项
21
数组 a 已经升序排列,下面函数可以返回数组中最后一个小于等于 x 的元素下标;如果不存在该元素,则返回 - 1。
def findLastLE(a, x):
l = 0
r = len(a) - 1
ans = -1
while l <= r:
mid = l + (r - l) // 2
if a[mid] <= x:
ans = mid
l = mid + 1
else:
r = mid - 1
return ans