Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- int splitArray(vector<int>& nums, int m) {
- long long lo = 0;
- long long hi = accumulate(nums.begin(), nums.end(), 0ll);
- while (hi - lo > 1) {
- auto mid = lo + (hi - lo) / 2;
- if (CanSplit(nums, m, mid)) hi = mid;
- else lo = mid;
- }
- return hi;
- }
- private:
- bool CanSplit(const vector<int>& nums, int m, long long max_sum) {
- int curr_chunk_id = 1;
- long long curr_sum = 0;
- for (int i = 0; i < nums.size(); ++i) {
- if (nums[i] > max_sum) return false;
- if (curr_sum + nums[i] <= max_sum) {
- curr_sum += nums[i];
- } else {
- ++curr_chunk_id;
- curr_sum = nums[i];
- }
- }
- return curr_chunk_id <= m;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement