#G1099. 客观题

客观题

一、单选题(每题 2 分,共 30 分)

  1. 在构建哈夫曼树时,每次应该选择( )合并。

{{ select(1) }}

  • 最小权值的节点
  • 最大权值的节点
  • 随机节点
  • 深度最深的节点
  1. 面向对象的编程思想主要包括以下哪些原则?( )

{{ select(2) }}

  • 贪心、动态规划、回溯
  • 并发、并行、异步
  • 递归、循环、分治
  • 封装、继承、多态
  1. 在队列中,元素的添加和删除是按照( )原则进行的。

{{ select(3) }}

  • 先进先出
  • 先进后出
  • 最小值先出
  • 随机进出
  1. 给定一个简单的类定义如下,( )语句在类的外部正确地创建了一个 Circle\tt Circle 对象并调用了 getArea\tt getArea 函数?

    class Circle {
    private:
        double radius;
    public:
        Circle(double r) : radius(r) {}
        double getArea() {
            return 3.14 * radius * radius;
        }
    };
    

{{ select(4) }}

  • Circle c = Circle(5.0); c.getArea(c);
  • Circle c(5.0); getArea(c);
  • Circle c = new Circle(5.0); c.getArea();
  • Circle c(5.0); c.getArea();
  1. 以下代码希望能在一棵二叉排序树中搜索特定的值,请在横线处填入( ),使其能正确实现相应功能。

    TreeNode* search(TreeNode* root, int target) {
        if (root == NULL || root->val == target) {
            return root;
        }
        if (_______________) {
            return search(root->left, target);
        } else {
            return search(root->right, target);
        }
    }
    

{{ select(5) }}

  • target < root->left
  • target < root->val
  • target > root->val
  • target > root->left
  1. 33 位格雷编码的正确顺序是( )。

{{ select(6) }}

  • 000, 001, 010, 011, 100, 101, 110, 111000,\ 001,\ 010,\ 011,\ 100,\ 101,\ 110,\ 111
  • 000, 001, 011, 010, 110, 111, 101, 100000,\ 001,\ 011,\ 010,\ 110,\ 111,\ 101,\ 100
  • 000, 010, 001, 011, 100, 110, 101, 111000,\ 010,\ 001,\ 011,\ 100,\ 110,\ 101,\ 111
  • 000, 010, 110, 100, 111, 101, 011, 001000,\ 010,\ 110,\ 100,\ 111,\ 101,\ 011,\ 001
  1. 以下动态规划算法的含义与目的是( )。

    int function(vector<int>& nums) {
        int n = nums.size();
        if (n == 0)
            return 0;
        if (n == 1)
            return nums[0];
        vector<int> dp(n, 0);
        dp[0] = nums[0];
        dp[1] = max(nums[0], nums[1]);
        for (int i = 2; i < n; ++i) {
            dp[i] = max(dp[i - 1], nums[i] + dp[i - 2]);
        }
        return dp[n - 1];
    }
    

{{ select(7) }}

  • 计算数组 nums\tt nums 中的所有元素的和
  • 计算数组 nums\tt nums 中相邻元素的最大和
  • 计算数组 nums\tt nums 中不相邻元素的最大和
  • 计算数组 nums\tt nums 中的最小元素
  1. 阅读以下广度优先搜索的代码:

    void bfs(TreeNode* root) {
        if (root == NULL) {
            return;
        }
        queue<TreeNode*> q;
        q.push(root);
        while (!q.empty()) {
            TreeNode* current = q.front();
            q.pop();
            cout << current->val << " ";
            if (current->left) {
                q.push(current->left);
            }
            if (current->right) {
                q.push(current->right);
            }
        }
    }
    

    使用以上算法遍历以下这棵树,可能的输出是( )。

        1
       / \
      2   3
     / \   \
    8   9   6
       / \   \
      4   5   7
             / \
            10 11
    

{{ select(8) }}

  • $1\ \ 2\ \ 8\ \ 9\ \ 4\ \ 5\ \ 3\ \ 6\ \ 7\ \ 10\ \ 11$
  • $1\ \ 2\ \ 3\ \ 4\ \ 5\ \ 6\ \ 7\ \ 8\ \ 9\ \ 10\ \ 11$
  • $1\ \ 2\ \ 3\ \ 8\ \ 9\ \ 6\ \ 4\ \ 5\ \ 7\ \ 10\ \ 11$
  • $1\ \ 2\ \ 3\ \ 8\ \ 9\ \ 4\ \ 5\ \ 6\ \ 7\ \ 10\ \ 11$
  1. 给定一个空栈,执行以下操作序列:

    操作序列:$\tt push(1),\ push(2),\ push(3),\ pop(),\ pop(),\ push(4),\ push(5),\ pop()$

    最终栈中的元素是( )。

{{ select(9) }}

  • 1, 21,\ 2
  • 1, 4, 51,\ 4,\ 5
  • 1, 2, 51,\ 2,\ 5
  • 1, 41,\ 4
  1. 一个有 124124 个叶子节点的完全二叉树,最多有( )个结点。

{{ select(10) }}

  • 247247
  • 248248
  • 249249
  • 250250
  1. 在求解最优化问题时,动态规划常常涉及到两个重要性质,即最优子结构和( )。

{{ select(11) }}

  • 重叠子问题
  • 分治法
  • 贪心策略
  • 回溯算法
  1. 若一棵二叉树的先序遍历为:A,B,D,E,C,F\tt A, B, D, E, C, F、中序遍历为:D,B,E,A,F,C\tt D, B, E, A, F, C,它的后序遍历为( )。

{{ select(12) }}

  • D,E,B,F,C,A\tt D, E, B, F, C, A
  • E,D,B,F,C,A\tt E, D, B, F, C, A
  • D,E,B,C,F,A\tt D, E, B, C, F, A
  • E,D,B,C,F,A\tt E, D, B, C, F, A
  1. 线性筛法与埃氏筛法相比的优势是( )。

{{ select(13) }}

  • 更容易实现
  • 更节省内存
  • 更快速
  • 更准确
  1. 以下代码使用了辗转相除法求解最大公因数,请在横线处填入( ),使其能正确实现相应功能。

    int gcd(int a, int b) {
        while (b != 0) {
            ______________________
        }
        return a;
    }
    

{{ select(14) }}

  • int temp = b; b = a / b; a = temp;
  • int temp = a; a = b / a; b = temp;
  • int temp = b; b = a % b; a = temp;
  • b = a % b; a = b;
  1. 下面的代码片段用于反转单链表,请进行( )修改,使其能正确实现相应功能。

    ListNode* reverseLinkedList(ListNode* head) {
        ListNode* prev = nullptr;
        ListNode* current = head;
        while (current != nullptr) {
            ListNode* next = current->next;
            current->next = next;
            prev = current;
            current = next;
        }
        return prev;
    }
    

{{ select(15) }}

  • current->next = next; 应该改为 current->next = prev;
  • ListNode* next = current->next; 应该改为 ListNode* next = prev->next;
  • current != nullptr 应该改为 current->next != nullptr
  • ListNode* prev = nullptr; 应该改为 ListNode* prev = head;

二、判断题(每题 2 分,共 20 分)

  1. 哈夫曼树是一种二叉树。( )

{{ select(16) }}

  • 正确
  • 错误
  1. 在动态规划中,状态转移方程的作用是定义状态之间的关系。( )

{{ select(17) }}

  • 正确
  • 错误
  1. 继承是将已有类的属性和方法引入新类的过程。( )

{{ select(18) }}

  • 正确
  • 错误
  1. 完全二叉树的任意一层都可以不满。( )

{{ select(19) }}

  • 正确
  • 错误
  1. 删除单向链表中的节点,只需知道待删除节点的地址即可,无需访问前一个节点。( )

{{ select(20) }}

  • 正确
  • 错误
  1. 在宽度优先搜索中,通常使用队列来辅助实现。( )

{{ select(21) }}

  • 正确
  • 错误
  1. 哈夫曼编码的主要应用领域是有损数据压缩。( )

{{ select(22) }}

  • 正确
  • 错误
  1. 二叉搜索树的查找操作的时间复杂度是 O(N)O(N)。( )

{{ select(23) }}

  • 正确
  • 错误
  1. 栈的基本操作包括入栈(push\tt push)和出栈(pop\tt pop)。( )

{{ select(24) }}

  • 正确
  • 错误
  1. 使用哈夫曼编码对一些字符进行编码,如果两个字符的频率差异最大,则它们的编码可能出现相同的前缀。( )

{{ select(25) }}

  • 正确
  • 错误