• 410. 分割数组的最大值


     

    labuladong 题解
    难度困难

    给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组。

    设计一个算法使得这 m 个子数组各自和的最大值最小。

    示例 1:

    输入:nums = [7,2,5,10,8], m = 2
    输出:18
    解释:
    一共有四种方法将 nums 分割为 2 个子数组。 
    其中最好的方式是将其分为 [7,2,5] 和 [10,8] 。
    因为此时这两个子数组各自的和的最大值为18,在所有情况中最小。

    示例 2:

    输入:nums = [1,2,3,4,5], m = 2
    输出:9
    

    示例 3:

    输入:nums = [1,4,4], m = 3
    输出:4
    

    提示:

    • 1 <= nums.length <= 1000
    • 0 <= nums[i] <= 106
    • 1 <= m <= min(50, nums.length)
    class Solution {
    public:
        int get_cnt(vector<int>& nums, int target) {
            int cnt = 1, cur_sum = 0;
            for(auto num: nums) {
                if (cur_sum+num>target) {
                    cur_sum = 0;
                    cnt++;
                }
                cur_sum+=num;
            }
            return cnt;
        }
     
        int splitArray(vector<int>& nums, int m) {
            int low = 0, high = 0;
            for (auto num:nums) {
                high += num;
                low = max(low,num);
            }
            while(low < high) {
                int mid = low + (high-low)/2;
                int m_cnt = get_cnt(nums,mid);
                if (m_cnt <= m) {
                    high = mid ;
                } else {
                    low = mid + 1;
                }
            }
            return low;
        }
    };
  • 相关阅读:
    SQL Server连接Oracle详细步骤
    SQLServer2012连接mysql5.5
    SQL Server的链接服务器技术
    2键盘录入Scanner
    1标识符
    电脑从新分盘(软件)
    Tomcat安装配置
    windows下安装和配置多个版本的JDK
    Myeclipse2014的安装
    Could not find acceptable representation
  • 原文地址:https://www.cnblogs.com/zle1992/p/16593466.html
Copyright © 2020-2023  润新知