1. 题目链接
2. 题目描述
3. 解题方法
题目中提到的是某个和的最大值是最小的,这种题目是可以用二分来解决的。
4. 代码
class Solution {
public:
int splitArray(vector<int>& nums, int k)
{
int l = 0, r = (int)1e9;
while(l < r)
{
int mid = (r - l) / 2 + l;
if(check(mid, nums, k)) r = mid;
else l = mid + 1;
}
return r;
}
bool check(int mid, vector<int>& nums, int k)
{
int cnt = 1, sum = 0;
for(auto e : nums)
{
if(sum + e <= mid) sum += e;
else
{
if(e > mid) return false;
cnt ++;
sum = e;
}
}
return cnt <= k;
}
};
最后附上我的打卡记录,希望各位大佬可以监督我一下。