GESP C++ 真题 · 逐题精解
首页C++五级真题 › 2026年3月 › 第11题

GESP 2026年3月 C++五级 单选题 第11题

C++五级单选题2026年3月第11题

所属知识点:复杂度分析 难度要求:掌握 考频:—

下面代码用分治求“最大连续子段和”,其时间复杂度为( )。
int solve(vector<int>& a, int l, int r){
if(l == r) return a[l];
int mid = l + (r - l) / 2;
int left = solve(a, l, mid);
int right = solve(a, mid + 1, r);
int sum = 0, lmax = INT_MIN;
for(int i = mid; i >= l; i--){
sum += a[i];
lmax = max(lmax, sum);
}
sum = 0;
int rmax = INT_MIN;
for(int i = mid + 1; i <= r; i++){
sum += a[i];
rmax = max(rmax, sum);
}
return max({left, right, lmax + rmax});
}

正确答案:B

题目解析

分治求最大连续子段和:递归两半再跨中点合并,时间复杂度 O(n log n)………

完整解析为会员内容二级及以上的逐题精讲需开通 VIP。一级解析全部免费。前往 GESPPASS 解锁

想系统刷完 GESP C++ 1~8 级真题,并查看每道题的逐题精讲?

进入 GESPPASS 开始练习