不是VIP会员,不能显示答案

题目解答

题目:
(归并第 k 小)已知两个长度均为 n 的有序数组 a1 和 a2(均为递增序,但不保证严格单调递增),并且给定正整数 k(1≤k≤2n),求数组 a1 和 a2 归并排序后的数组里第 k 小的数值。

试补全程序。



#include <bits/stdc++.h>

using namespace std;



int solve(int *a1, int *a2, int n, int k) {

int left1 = 0, right1 = n - 1;

int left2 = 0, right2 = n - 1;

while (left1 <= right1 && left2 <= right2) {

int m1 = (left1 + right1) >> 1;

int m2 = (left2 + right2) >> 1;

int cnt = __(1)__;

if (__(2)__) {

if (cnt < k) left1 = m1 + 1;

else right2 = m2 - 1;

} else {

if (cnt < k) left2 = m2 + 1;

else right1 = m1 - 1;

}

}

if (__(3)__) {

if (left1 == 0) {

return a2[k - 1];

} else {

int x = a1[left1 - 1], __(4)__ ;

return std::max(x, y);

}

} else {

if (left2 == 0) {

return a1[k - 1];

} else {

int x = a2[left2 - 1], __(5)__ ;

return std::max(x, y);

}

}

}




选择题

1) ⑴处应填( )。

2) ⑵处应填( )。

3) ⑶处应填( )。

4) ⑷处应填( )。

5) ⑸处应填( )。
考点:
分析:
解答:
评论:
老师: