PROBLEM SET
题库
按难度与知识点筛选,找到适合的练习题。
题目列表
共 67434 题
A18408
数组的存储空间在物理上通常是连续的,而链表的结点可以存储在不连续的内存空间中。
C-L5
困难
--
A18409
高精度减法中,假设两个高精度数按低位在前存储,且已经保证被减数不小于减数。下面处理借位逻辑代码中横线处应填入( )。if (a[i] < b[i]) { a[i + 1]--; ________________; } t = a[i] - b[i];
C-L5
困难
--
A18410
小杨在学校义卖会上负责打包“零食盲盒”。每个盲盒重量不同,快递盒最多承重 limit 克,每个快递盒最多装两个盲盒。为了尽量少用快递盒,他采用如下策略:(1)每次把最轻的盲盒和最重的盲盒尝试放在一起;(2)如果两者重量之和不超过 limit ,就一起装;(3)否则,只能让最重的盲盒单独装一盒。下面代码用于计算最少需要多少个快递盒,则横线处应填入的是( )。int minBoxes(vector<…
C-L5
困难
--
A18411
在对长度为n(n≥1)的数组进行归并排序的过程中, mergeArray 函数(合并两个有序子数组的操作)被调用的次数是( )。const int MAXN = 100005; int a[MAXN]; int tempArr[MAXN]; void mergeArray(int left, int mid, int right) { int i = left; // 左半部分起点 int j …
C-L5
困难
--
A18412
下面哪句话最符合归并排序的思想?( )
C-L5
困难
--
A18413
下面代码段实现了快速排序的划分操作(以首元素为基准),横线处代码应填入( )。int partition(vector<int>& arr, int low, int high) { int pivot = arr[low]; int i = low, j = high; while (i < j) { while (i < j && arr[j] >= pivot) j--; while (i…
C-L5
困难
--
A18414
有若干根木头,长度存于 wood 。每切一刀可以把一段木头分成两段。函数 check(wood, K, x) 返回:用不超过 K 刀,能否使所有木段长度都不超过 x 。下面代码使用二分答案查找最小可行的 x ,横线处应填( )。int binary_cut(vector<int>& wood, int K) { int l = 1; int r = 0; for (int len : wood)…
C-L5
困难
--
A18415
在一个有序数组中查找第一个大于或等于 x 的元素位置,横线处应填写( )。int lowerBound(vector<int>& a, int x) { int l = 0, r = a.size(); while (l < r) { int mid = l + (r - l) / 2; if (a[mid] >= x) ________________; // 在此处填入代码 else l =…
C-L5
困难
--
A18416
下面代码用于统计 n 中因子 2 出现了多少次。若 n = 40 ,输出是( )。int n = 40; int cnt = 0; while (n % 2 == 0) { cnt++; n /= 2; } cout << cnt;
C-L5
困难
--
A18417
下面代码实现了计算 的快速幂算法,该算法体现的编程思想是( )。long long power(long long x, int n) { if (n == 0) return 1; long long res = power(x, n / 2); if (n % 2 == 0) return res * res; else return res * res * x; }
C-L5
困难
--
A18418
下面关于埃氏筛法的说法正确的是( )。
C-L5
困难
--
A18419
下面代码实现线性筛(欧拉筛),以筛选出 以内的所有素数。横线处的代码应为( )。vector<int> sieve(int n) { vector<bool> is_prime(n + 1, true); vector<int> primes; if (n >= 0) is_prime[0] = false; if (n >= 1) is_prime[1] = false; for (int i…
C-L5
困难
--
A18420
给定一棵二叉树,采用广度优先搜索 BFS 返回其右视图,其中右视图中的每个节点都是该层最右侧的节点。横线处应填写( )。vector<int> rightSideView(TreeNode* root) { vector<int> result; if (!root) return result; queue<TreeNode*> q; q.push(root); while (!q.empty…
C-L6
困难
--
A18421
使用如下欧几里得算法求 gcd(105, 45) 时,函数 gcd(a, b) 的递归调用序列正确的是( )。int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
C-L5
困难
--
A18422
双链表结点定义如下,若要删除双链表中的中间结点(非首尾节点) p ,下面写法正确的是( )。struct Node { int val; Node* prev; Node* next; };
C-L5
困难
--
A18423
下面代码遍历并输出一个循环单链表,其中 head 指向链表的第一个节点,横线处应填入的是( )。struct Node { int val; Node* next; }; void printList(Node* head) { if (head == nullptr) return; Node* p = head; _______________________ // 在此处填入代码 cout…
C-L5
困难
--
A18424
假设 head != nullptr ,下面是实现单向循环链表在头节点后插入新节点的代码,横线处应填入( )。struct Node { int val; Node* next; }; void insertAfterHead(Node* head, int x) { Node* newNode = new Node; newNode->val = x; ____________________…
C-L5
困难
--
A18425
满二叉树
C-L6
困难
--
A18427
动态规划问题通常要求具有最优子结构,并且常常存在重叠子问题。
C-L6
困难
--
A18428
使用栈非递归实现二叉树前序遍历时,若希望先访问左子树,通常应先将右孩子入栈,再将左孩子入栈。
C-L6
困难
--