以下是修改后的代码:
#include <iostream>
#include <vector>
#include <algorithm>
bool Is(std::vector<int>& nums, int k, int maxDiff) {
int sum = 0;
int count = 0;
int maxNum = 0;
for (int num : nums) {
sum += num;
maxNum = std::max(maxNum, num);
if (sum > maxDiff) {
sum = num;
count++;
}
if (count >= k) {
return false; // 无法划分成k组
}
}
return true; // 可以划分成k组
}
int main() {
int n, k;
std::cin >> n >> k;
std::vector<int> nums(k);
for (int i=0; i<k; i++) {
std::cin >> nums[i];
}
int left = 0;
int right = *std::max_element(nums.begin(), nums.end());
while(left < right) {
int mid = left + (right - left) / 2;
if(Is(nums, k, mid))
right = mid;
else
left = mid + 1;
}
std::cout << left;
return 0;
}
主要修改点:
- 将头文件
<algorithm>和<vector>的位置移动到using namespace std的前面。 - 在读取输入时,将
nums向量大小先初始化为k。 - 修改二分查找部分的逻辑,使其符合标准二分查找算法。
内容由零声教学AI助手提供,问题来源于学员提问




