数据结构与算法——2022每日一练(3月)

文章目录

  • 每日一练
    • 3.2
    • 3.3
    • 3.4
    • 3.5
    • 3.6
    • 3.7
    • 3.8
    • 3.9
    • 3.10
    • 3.11
    • 3.12
    • 3.13
    • 3.14
    • 3.15
    • 3.16
    • 3.17
    • 3.18
    • 3.19
    • 3.20
    • 3.21
    • 3.22
    • 3.23
    • 3.24
    • 3.25
    • 3.27
    • 3.28
    • 3.29
    • 3.30
    • 3.31

每日一练

3.2

  • 若要维护一个从队首到队尾单调递增的单调队列,初始时该队列为空,当依次往该队列的队尾插入下列 10 个元素的过程中,队列长度(即队列中包含的元素个数)最大为( )。
7,5,3,4,6,2,5,4,7,3

A. 2

B. 3

C. 4

D. 5

【答案】B

【解析】对于一个单调递增的单调队列来说,初始时队列为空。

  1. 加入数字 7 后,队列变为 [ 7 ];
  2. 加入数字 5 后,队列变为 [ 5 ];
  3. 加入数字 3 后,队列变为 [ 3 ];
  4. 加入数字 4 后,队列变为 [ 3 , 4 ];
  5. 加入数字 6 后,队列变为 [ 3 , 4 , 6 ];
  6. 加入数字 2 后,队列变为 [ 2 ];
  7. 加入数字 5 后,队列变为 [ 2 , 5 ];
  8. 加入数字 4 后,队列变为 [ 2 , 4 ];
  9. 加入数字 7 后,队列变为 [ 2 , 4 , 7];
  10. 加入数字 3 后,队列变为 [ 2 , 3 ]。

可以发现,在整个过程中,队列长度最大为 3 。

3.3

  • 以下哪些是解决哈希冲突的常用方法()。

    ① 开放定址法

    ② 链地址法(拉链法)

    ③ 再哈希法

    ④ 建立公共溢出区

A. 仅①、②

B. 仅①、②、③

C. 仅①、②、④

D. 全部都是

【答案】D

【解析】

  • ① 开放定址法:从发生冲突的那个单元起,按照一定的次序,从哈希表中找到一个空闲的单元。然后把发生冲突的元素存入到该单元的一种方法。开放定址法需要的表长度要大于等于所需要存放的元素。
    在开放定址法中解决冲突的方法有:线行探查法、平方探查法、双散列函数探查法。
    开放定址法的缺点在于删除元素的时候不能真的删除,否则会引起查找错误,只能做一个特殊标记。只到有下个元素插入才能真正删除该元素。

  • ② 链地址法(拉链法):链接地址法的思路是将哈希值相同的元素构成一个同义词的单链表,并将单链表的头指针存放在哈希表的第i个单元中,查找、插入和删除主要在同义词链表中进行。链表法适用于经常进行插入和删除的情况。

  • ③ 再哈希法:就是同时构造多个不同的哈希函数 H i = R H i ( k e y ) i = 1 , 2 , 3 … k Hi = RHi(key) i= 1,2,3 … k Hi=RHi(key)i=1,2,3k;当 H 1 = R H 1 ( k e y ) H1 = RH1(key) H1=RH1(key) 发生冲突时,再用 H 2 = R H 2 ( k e y ) H2 = RH2(key) H2=RH2(key) 进行计算,直到冲突不再产生,这种方法不易产生聚集,但是增加了计算时间。

  • ④ 建立公共溢出区:将哈希表分为公共表和溢出表,当溢出发生时,将所有溢出数据统一放到溢出区。

3.4

  • 若要对下面这个大小为 10 的数列从小到大排序,要求每次只能交换相邻的两个数,则至少需要( )次交换操作能够对下面这个数列实现从小到大排序。
2,5,8,3,4,10,6,1,9,7

A. 6

B. 13

C. 17

D. 22

【答案】C

【解析】本题的答案等价于数列中逆序对的数量。对于两个下标 i 和 j 来说,若 i < j 且 ai > aj,则称 ai 和 aj 构成一对逆序对。本题中,因为每次只能交换相邻的两个数,所以每次交换最多只能让逆序对的数量减小 1 。所以我们可以考虑每次交换的一对相邻的数都是前一个数大于后一个数的,此时每次交换都能够让逆序对的数量减小 1。则总的交换次数就等于逆序对的数量。

3.5

  • 哪项不是JDK提供的用于并发编程的同步器?

A. Semaphore

B. CyclicBarrier

C. CountDownLatch

D. Counter

【答案】D

3.6

  • 关于Java中的ClassLoader下面的哪些描述是错误的:( )

A. 默认情况下,Java应用启动过程涉及三个ClassLoader: Boostrap, Extension, System

B. 一般的情况不同ClassLoader装载的类是不相同的,但接口类例外,对于同一接口所有类装载器装载所获得的类是相同的

C. 类装载器需要保证类装载过程的线程安全

D. ClassLoader的父子结构中,默认装载采用了父优先

【答案】B

3.7

  • 用二分法查找表 (a0, a1, a2, a3, …, a26) ,需要比较 2 次才能找到的元素是()。

A. a5和a20

B. a5和a21

C. a6和a20

D. a6和a21

【答案】C

【解析】二分查找第一次查找的区间是[0,26],第一次查找的元素是a(0+26)/2=a13,以a13为分界点,第二次查找的区间范围是 [0,12] 或 [14,26]。若查找区间是[0, 12],则对应的查找的元素是

a(0+12)/2=a6。若查找区间是 [14,26],则对应的查找的元素是 a(14+26)/2=a20。所以比较两次能够找到的元素是 a6 和 a20 。

3.8

  • 对数组 A[] = { 4, 16, 27, 3, 88, 56, 68, 42, 33, 29 } 进行Hash存储时,选用 H(K) = K%13 作为 Hash 函数,则 Hash 地址为 3 的元素有( )个。

A. 2

B. 3

C. 4

D. 5

【答案】D

【解析】H(4)=4、H(16)=3、H(27)=1、H(3)=3、H(88)=10、H(56)=4、H(68)=3、H(42)=3、H(33)=7、H(29)=3,其中,H(16) = H(3) = H(68) = H(42) = H(29) = 3,共 5 个。

3.9

  • 以下排序算法时间复杂度为 O(n·log(n)) 的是( )。

    ① 冒泡排序

    ② 归并排序

    ③ 选择排序

    ④ 堆排序

    ⑤ 插入排序

A. ①和②

B. ①和④

C. ②和④

D. ④和⑤

【答案】C

【解析】归并排序和堆排序的时间复杂度为 O(n·log(n)),冒泡排序、选择排序、插入排序的时间复杂度为 O(n2)。

3.10

  • 归并排序相对于快速排序的优点不包括( )。

A. 是稳定的

B. 最坏情况下更高效

C. 空间复杂度低

D. 不会退化

【答案】C

【解析】归并排序需要额外的空间保存中间数据,所以它的空间复杂度相对快速排序要高,这并不是归并排序的优点。

3.11

  • 假设小开用某个排序算法对整数序列{3,7,5,4,8,2,1,6}进行排序。以下为排序过程中序列状态的变化过程:

    • 第一步:3,7,4,5,2,8,1,6
    • 第二步:3,4,5,7,1,2,6,8
    • 第三步:1,2,3,4,5,6,7,8

    请问小开用的是什么排序算法?( )。

A. 选择排序

B. 归并排序

C. 快速排序

D. 插入排序

【答案】B

【解析】通过观察规律发现,第 i 步的时候将两段长度为 2i-1 的有序区间合并成了一个长度为 2i 的有序区间。可以发现是基于归并排序实现的。

3.12

  • 下面关于JAVA的垃圾回收机制,正确的是( )

A. 当调用“System.gc()”来强制回收时,系统会立即回收垃圾

B. 垃圾回收不能确定具体的回收时间

C. 程序可明确地标识某个局部变量的引用不再被使用

D. 程序可以显式地立即释放对象占有的内存

【答案】B

3.13

  • 如果一个接口Glass有个方法setColor(),有个类BlueGlass实现接口Glass,则在类BlueGlass中正确的是? ( )

A. protected void setColor() { …}

B. void setColor() { …}

C. public void setColor() { …}

D. 以上语句都可以用在类BlueGlass中

【答案】C

3.14

  • 连续周期信号 f(t) 的频谱 F(w) 的特点是( )。

A. 周期连续频谱

B. 周期离散频谱

C. 非周期连续频谱

D. 非周期离散频谱

【答案】D

【解析】连续周期信号 f(t) 的频谱 F(w) 的特点是非周期离散频谱。

3.15

  • 满足抽样定理条件下,抽样信号 fs(t) 的频谱 Fs(jω) 的特点是( )。

A. 周期、连续频谱

B. 周期、离散频谱

C. 连续、非周期频谱

D. 离散、非周期频谱

【答案】A

【解析】满足抽样定理条件下,抽样信号 fs(t) 的频谱 Fs(jω) 是周期、连续频谱。

3.16

  • 信号的频谱是周期的连续谱,则该信号在时域中为( )。

A. 连续的周期信号

B. 离散的周期信号

C. 连续的非周期信号

D. 离散的非周期信号

【答案】D

【解析】信号的频谱是周期的连续谱,则该信号在时域中为离散的非周期信号。

3.17

  • 信号的频谱是周期的离散谱,则该信号在时域中为( )。

A. 连续的周期信号

B. 离散的周期信号

C. 连续的非周期信号

D. 离散的非周期信号

【答案】B

【解析】信号的频谱是周期的离散谱,则该信号在时域中为离散的周期信号。

3.18

  • 已知 f(t) 的频带宽度为 Δω,则 f(2t-4) 的频带宽度为( )。

A. 2Δω

B. Δω/2

C. 2(Δω-4)

D. 2(Δω-2)

【答案】A

【解析】根据时域和频域之间关系,可知若时域扩展,则频域压缩。所以若 f(t) 的频带宽度为 Δω ,则信号 f(2t) 的频带宽度为 2Δω 。

3.19

  • 已知一个线性表(38,25,74,63,52,48),假定采用散列函数h(key) = key%7 计算散列地址,并散列存储在散列表A【0…6】中,若采用线性探测方法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为?

A. 1.5

B. 1.7

C. 2.0

D. 2.3

【答案】C

【解析】平均查找长度=总的查找次数/元素数 总的查找次数: 38%7=3 (第1次出现3,无冲突,放在位置3,查找次数为1) 25%7=4(第1次出现4,无冲突,放在位置4,查找次数为1) 74%7=4(第2次出现4,有冲突,放在位置5,查找次数为2) 63%7=0(第1次出现0,无冲突,放在位置0,查找次数为1) 52%7=3(第2次出现3,有冲突,发现冲突3,4,5,故只能放到6,查找次数为4) 48%7=6 (第1次出现6,有冲突,发现冲突6,0,故只能放到1,查找次数为3) 1+1+2+1+4+3=12 元素数=6 所以:平均查找长度=12/6=2

3.20

  • 执行完下列语句段后,i值为()
int f(int x) {
    return ((x > 0) ? x * f(x - 1) : 2)
}
int i;
i = f(f(2))

A. 4

B. 48

C. 8

D. 无限递归

【答案】B

3.21

  • 下列名词和其简称对应错误的是( )。

    ① 离散傅里叶级数 DFS ② 离散傅里叶变换 DFT ③ 快速傅里叶变换 QFT ④ 数字信号处理 DSP

A. 只有①

B. 只有②

C. 只有③

D. ②和④

【答案】C

【解析】快速傅里叶变换(fast Fourier transform)简称 FFT 。

3.22

  • 下表中关于四种傅里叶变换形式的归纳中错误的是( )。

    序号 时间函数 频率函数
    连续和非周期 非周期和连续
    连续和周期(T0) 非周期和离散(Ω0=2π/T0)
    离散(Ts)和非周期 周期(Ωs=2π/Ts)和连续
    离散(Ts)和周期(T0) 周期(Ωs=2π/Ts)和离散(Ω0=2π/T0)

A. 仅①

B. 仅②

C. 仅①、③

D. 全部正确

【答案】D

【解析】上述四种傅里叶变换形式的归纳全部是正确的。

3.23

  • 设有模拟信号 xa(t)=cos(2π × 1000t + θ),现在以时间间隔 Ts = 0.25 ms 进行均匀采样。假定从 t=0 开始采样,共采样 N 点。则采样后序列 x(n) 的表达式为( )。

    ① xa(t) = cos(0.5πn + θ), n = 0,1,2,……,N-1

    ② xa(t) = cos(0.5πn + 2θ), n = 0,1,2,……,N-1

    ③ xa(t) = cos(πn + θ), n = 0,1,2,……,N-1

    ④ xa(t) = cos(πn + 2θ), n = 0,1,2,……,N-1

A. ①

B. ②

C. ③

D. ④

【答案】A

【解析】xa(t) = cos(2π × 1000t + θ) = cos(0.5πn + θ), n = 0,1,2,……,N-1

3.24

  • 设有模拟信号 xa**(t)=cos(2π × 1000t + θ),现在以时间间隔 T**s = 0.25 ms 进行均匀采样。假定从 t=0 开始采样,共采样 N 点。将 x(n) 取 N 点做 N 点 DFT,则当 N 取值为( )时,DFT 的结果能够精确地反映 x(n) 的频谱

A. 2

B. 3

C. 4

D. 5

【答案】C

【解析】为了能用DFT精确地反映该周期信号频率,应使采样后仍形成周期序列。该题的采样间隔为 Ts = 0.25 ms,因为 2π/ω = 4,因此形成的序列周期为 4。可以取序列的一个周期作 4 点的 DFT,信号应准确地出现在 4 点 DFT 的第二条谱线上。

3.25

  • 设有模拟信号 xa**(t)=cos(2π × 1000t + θ),现在以时间间隔 T**s = 0.25 ms 进行均匀采样。若希望 DFT 的模拟频率分辨率达到 1 Hz,此时最小的采样点数 N 应为( )。

A. 200

B. 4000

C. 8000

D. 10000

【答案】B

【解析】2π / Nmin = 2π × 1 × Ts 得 Nmin = 1 / Ts = 4000 。

3.27

  • 下列关于Spring MVC获取参数的说法中,错误的是( )

A. @DateTimeFormat注解用于获取格式化的日期参数。

B. @NumberFormat注解用于获取格式化的数字参数。

C. @RequestBody注解用于从请求体中获取参数。

D. 其他说法都不对

【答案】D

3.28

  • 周期连续信号的傅里叶分析称为()。

A. 傅里叶级数

B. 傅里叶变换

C. 离散时间傅里叶变换

D. 离散傅里叶变换

【答案】A

【解析】在满足一定条件下,任何一个周期信号都可以分解为正弦信号的叠加,这种分解就称为傅里叶级数。周期连续信号的傅里叶分析称为傅里叶级数(FS)。

3.29

  • 非周期连续信号的傅里叶分析称为()。

A. 傅里叶级数

B. 傅里叶变换

C. 离散时间傅里叶变换

D. 离散傅里叶变换

【答案】B

【解析】对于连续信号,如果信号不是周期的,其傅里叶分析结果又是如何呢?非周期信号可以等效为无穷大的周期信号。于是,由傅里叶级数出发,利用极限的有关概念,可以推导出非周期信号的傅里叶分析结果,这就是傅里叶变换(FT)。

3.30

  • 非周期离散信号的傅里叶分析称为()。

A. 傅里叶级数

B. 傅里叶变换

C. 离散时间傅里叶变换

D. 离散傅里叶变换

【答案】C

【解析】对非周期的连续信号进行时域采样,得到非周期的离散信号,此时的傅里叶分析称为离散时间傅里叶变换(DFTT)。由时频互易性原理可知,时域的采样等效于频域的周期延拓,因此DFTT的频域是周期的。

3.31

  • 周期离散信号的傅里叶分析称为()。

A. 傅里叶级数

B. 傅里叶变换

C. 离散时间傅里叶变换

D. 离散傅里叶变换

【答案】D

【解析】对周期离散信号的傅里叶分析称为离散傅里叶变换(DFT)。

你可能感兴趣的:(数据结构与算法,面试题,java,算法,数据结构,傅里叶变换,DFT)