#1236. 算法思想·单选训练4(3)

算法思想·单选训练4(3)

算法思想·单选训练4(3)

第 1 题(单选)

有如下函数 fun,则 fun(20, 12) 的返回值为()。 6

int fun(int a, int b) {
if (a % b == 0)
return b; else
return fun(b, a % b); }

{{ select(1) }}

  • 20
  • 12
  • 4
  • 2

第 2 题(单选)

关于分治算法, 以下哪个说法正确?

{{ select(2) }}

  • 分治算法将问题分成子问题,然后分别解决子问题,最后合并结果。
  • 归并排序不是分治算法的应用。
  • 分治算法通常用于解决小规模问题。
  • 分治算法的时间复杂度总是优于O(nlog("))。

第 3 题(单选)

下面关于链表和数组的描述,错误的是()。

{{ select(3) }}

  • 当数据数量不确定时,为了应对各种可能的情况,需要申请一个较大的数组,可能浪费空间 ;此时用链表比较合适,大小可动态调整。
  • 在链表中访问节点的效率较低,时间复杂度为O(n)。
  • 链表插入和删除元素效率较低,时间复杂度为O(n)。
  • 链表的节点在内存中是分散存储的,通过指针连在一起。

第 4 题(单选)

在循环单链表中,节点的 next 指针指向下一个节点,最后一个节点的 next 指针指向()。

{{ select(4) }}

  • 当前节点
  • nullptr
  • 第一个节点
  • 上一个节点 []第 93 题 为了方便链表的增删操作,一些算法生成一个虚拟头节点,方便统一删除头节点和其他节点。下面代码实现了删除链表中值为 val 的节点,横线上应填的最佳代码是( )。 []struct LinkedNode { int val; LinkedNode* next; LinkedNode(int val):val(val), next(nullptr){} }; 6 void removeElements(LinkedNode* head, int val) { if (head == nullptr) { return; } LinkedNode* cur; LinkedNode* dummyHead = new LinkedNode(0); //虚拟头节点 // 在此处填入代码 while(cur ->next != nullptr) { if(cur->next->val == val) { []LinkedNode* tmp = cur->next; [] []18 19 20 21 22 23 24 25 26 27 28 29 cur->next = cur->next->next; delete tmp; tmp = nullptr; } else { cur = cur ->next; } } head = dummyHead->next; delete dummyHead; dummyHead = nullptr; } A. dummyHead->next = head; cur = dummyHead; B. dummyHead->next = head->next; cur = dummyHead; [] C. dummyHead->next = head; cur = dummyHead->next; [] D. dummyHead->next = head->next; cur = dummyHead->next;

第 5 题(单选)

链表不具备的特点是( )。

{{ select(5) }}

  • 可随机访问任何一个元素
  • 插入 、删除操作不需要移动元素 []
  • 无需事先估计存储空间大小
  • 所需存储空间与存储元素个数成正比