您现在的位置是:主页 > news > 网站qq客服样式/官网关键词优化价格

网站qq客服样式/官网关键词优化价格

admin2025/6/1 14:22:18news

简介网站qq客服样式,官网关键词优化价格,影视网站怎么做,系统开发和网站开发给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。注意:数组长度 n 满足以下条件: 1 ≤ n ≤ 1000 1 ≤ m ≤ min(50, n)示例:输入:nums [7,2,5,10,8]m 2输出:18解释:一共有…

网站qq客服样式,官网关键词优化价格,影视网站怎么做,系统开发和网站开发给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。注意:数组长度 n 满足以下条件: 1 ≤ n ≤ 1000 1 ≤ m ≤ min(50, n)示例:输入:nums [7,2,5,10,8]m 2输出:18解释:一共有…

给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。
注意:
数组长度 n 满足以下条件:
    1 ≤ n ≤ 1000
    1 ≤ m ≤ min(50, n)
示例:
输入:
nums = [7,2,5,10,8]
m = 2
输出:
18
解释:
一共有四种方法将nums分割为2个子数组。
其中最好的方式是将其分为[7,2,5] 和 [10,8],
因为此时这两个子数组各自的和的最大值为18,在所有情况中最小。
详见:https://leetcode.com/problems/split-array-largest-sum/description/
C++:

class Solution {
public:int splitArray(vector<int>& nums, int m) {long long left = 0, right = 0;for (int i = 0; i < nums.size(); ++i){left = max((int)left, nums[i]);right += nums[i];}while (left < right) {long long mid = left + (right - left) / 2;if (can_split(nums, m, mid)){right = mid;}else{left = mid + 1;}}return left;}bool can_split(vector<int>& nums, int m, int sum) {int cnt = 1, curSum = 0;for (int i = 0; i < nums.size(); ++i){curSum += nums[i];if (curSum > sum) {curSum = nums[i];++cnt;if (cnt > m) {return false;}}}return true;}
};

 参考:https://www.cnblogs.com/grandyang/p/5933787.html

转载于:https://www.cnblogs.com/xidian2014/p/8855910.html