LeetCode 410. 分割数组的最大值(极小极大化 二分查找 / DP)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 二分查找
      • 2.2 DP

1. 题目

给定一个非负整数数组和一个整数 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,在所有情况中最小。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/split-array-largest-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 二分查找

类似题目:
LeetCode 875. 爱吃香蕉的珂珂(二分查找)
LeetCode LCP 12. 小张刷题计划(二分查找)
LeetCode 1011. 在 D 天内送达包裹的能力(二分查找)
LeetCode 1062. 最长重复子串(二分查找)
LeetCode 5438. 制作 m 束花所需的最少天数(二分查找)
LeetCode 1102. 得分最高的路径(优先队列BFS/极大极小化 二分查找)
LeetCode 1231. 分享巧克力(极小极大化 二分查找)

class Solution {
public:int splitArray(vector<int>& nums, int m) {long long l = 0, r = 1e15, maxsum, ans;while(l <= r){maxsum = l+((r-l)>>1);if(canSplitM(nums, maxsum, m))r = maxsum-1, ans = maxsum;elsel = maxsum+1;}return ans;}bool canSplitM(vector<int>& nums, long long maxsum, int m) {int count = 0;long long sum = 0;for(int i = 0; i < nums.size(); ++i){if(sum+nums[i] <= maxsum)//和的最大值没有超过设定的maxsumsum += nums[i];else//超过了{count++;sum = 0;i--;}if(count >= m)return false;}return true;}
};

0 ms 7 MB

2.2 DP

  • dp[i][j] 表示前 i 个数,分成 j 组的最小的最大和的值
  • 先预处理求出前缀和 sum
  • dp[i][j]=min(dp[i][j],max(dp[k][j−1],sum[i]−sum[k])),k∈[0,i]dp[i][j] = min(dp[i][j], max(dp[k][j-1], sum[i]-sum[k])), k \in[0,i]dp[i][j]=min(dp[i][j],max(dp[k][j1],sum[i]sum[k])),k[0,i]
class Solution {
public:int splitArray(vector<int>& nums, int m) {int n = nums.size(), i, j, k;vector<long long> sum(n+1, 0);for(i = 1; i <= n; ++i)sum[i] = sum[i-1] + nums[i-1];vector<vector<long long>> dp(n+1, vector<long long>(m+1,1e15));dp[0][0] = 0;for(i = 1; i <= n; ++i)for(j = 1; j <= min(i,m); ++j)for(k = 0; k <= i; ++k)dp[i][j] = min(dp[i][j], max(dp[k][j-1], sum[i]-sum[k]));return dp[n][m];}
};

412 ms 8.2 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 强制结束线程_在python中实现强制关闭线程的示例

Python 如何强制关闭线程过去只可以用来回忆&#xff0c;别沉迷在阴影中&#xff0c;否则永远看不清前面的路。Python用sleep停止一个线程的运行&#xff0c;而不影响主线程的运行&#xff0c;案例代码如下&#xff1a; from threading import *import time class MyThread(Thr…

LeetCode 1121. 将数组分成几个递增序列

文章目录1. 题目2. 解题1. 题目 给你一个 非递减 的正整数数组 nums 和整数 K&#xff0c;判断该数组是否可以被分成一个或几个 长度至少 为 K 的 不相交的递增子序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,2,3,3,4,4], K 3 输出&#xff1a;true 解释&#xff…

LeetCode 1272. 删除区间

文章目录1. 题目2. 解题1. 题目 给你一个 有序的 不相交区间列表 intervals 和一个要删除的区间 toBeRemoved&#xff0c; intervals 中的每一个区间 intervals[i] [a, b] 都表示满足 a < x < b 的所有实数 x 的集合。 我们将 intervals 中任意区间与 toBeRemoved 有交…

V折扣购买流程图

以前画的V折扣购买流程图&#xff1a; 转载于:https://www.cnblogs.com/wangkongming/archive/2013/01/16/2862275.html

LeetCode 549. 二叉树中最长的连续序列(树上DP)

文章目录1. 题目2. 解题1. 题目 给定一个二叉树&#xff0c;你需要找出二叉树中最长的连续序列路径的长度。 请注意&#xff0c;该路径可以是递增的或者是递减。 例如&#xff0c;[1,2,3,4] 和 [4,3,2,1] 都被认为是合法的&#xff0c;而路径 [1,2,4,3] 则不合法。 另一方面&…

LeetCode 1230. 抛掷硬币(DP)

文章目录1. 题目2. 解题1. 题目 有一些不规则的硬币。在这些硬币中&#xff0c;prob[i] 表示第 i 枚硬币正面朝上的概率。 请对每一枚硬币抛掷 一次&#xff0c;然后返回正面朝上的硬币数等于 target 的概率。 示例 1&#xff1a; 输入&#xff1a;prob [0.4], target 1 输…

LeetCode 634. 寻找数组的错位排列(DP)

文章目录1. 题目2. 解题1. 题目 在组合数学中&#xff0c;如果一个排列中所有元素都不在原先的位置上&#xff0c;那么这个排列就被称为错位排列。 给定一个从 1 到 n 升序排列的数组&#xff0c;你可以计算出总共有多少个不同的错位排列吗&#xff1f; 由于答案可能非常大&…

LeetCode 489. 扫地机器人(DFS)

文章目录1. 题目2. 解题1. 题目 房间&#xff08;用格栅表示&#xff09;中有一个扫地机器人。 格栅中的每一个格子有空和障碍物两种可能。 扫地机器人提供4个API&#xff0c;可以向前进&#xff0c;向左转或者向右转。每次转弯90度。 当扫地机器人试图进入障碍物格子时&…

LeetCode 1215. 步进数(BFS/DFS)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS1. 题目 如果一个整数上的每一位数字与其相邻位上的数字的绝对差都是 1&#xff0c;那么这个数就是一个「步进数」。 例如&#xff0c;321 是一个步进数&#xff0c;而 421 不是。 给你两个整数&#xff0c;low 和 high&#xff0c;请你…

python自动化入门_python自动化-python入门

1、安装python&#xff0c;配置环境变量。windows下是安装路径直接配到环境变量里面就可以mac添加环境变量在~/.bash_profile这个文件中&#xff0c;添加一行alias python"/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/bin/python3.7"问…

LeetCode 364. 加权嵌套序列和 II(重复叠加)

文章目录1. 题目2. 解题1. 题目 给一个嵌套整数序列&#xff0c;请你返回每个数字在序列中的加权和&#xff0c;它们的权重由它们的深度决定。 序列中的每一个元素要么是一个整数&#xff0c;要么是一个序列&#xff08;这个序列中的每个元素也同样是整数或序列&#xff09;。…

LeetCode 第 31 场双周赛(273/2767,前9.87%,第3次全部通过)

文章目录1. 比赛结果2. 题目1. LeetCode 5456. 在区间范围内统计奇数数目 easy2. LeetCode 5457. 和为奇数的子数组数目 medium3. LeetCode 5458. 字符串的好分割数目 medium4. LeetCode 5459. 形成目标数组的子数组最少增加次数 hard1. 比赛结果 双周赛题目比较简单。第一题没…

java发送outlook邮件_通过Java代码发送OutLook邮件

准备我们想通过Java代码实现发送OutLook邮件&#xff0c;必须准备以下材料&#xff1a;OutLook邮箱目标邮箱查看OutLook邮箱信息打开OutLook邮箱&#xff0c;在Settings中搜索或找到SMTP&#xff1a;打开以下界面&#xff0c;拿到我们想要的数据(ServerName 以及 Port)&#xf…

LeetCode 第 199 场周赛(757/5231,前14.5%)

文章目录1. 比赛结果2. 题目1. LeetCode 5472. 重新排列字符串 easy2. LeetCode 5473. 灯泡开关 IV medium3. LeetCode 5474. 好叶子节点对的数量 medium4. LeetCode 5462. 压缩字符串 II hard1. 比赛结果 第一题失误&#xff0c;点完提交就跑了&#xff0c;没想到。。第四题D…

java x.length_Java中的length和length()

红颜莎娜稍微简化一下&#xff0c;您可以认为它是一种特殊情况&#xff0c;而不是普通类(有点像基元&#xff0c;但不是)。字符串和所有集合都是类&#xff0c;因此获取大小&#xff0c;长度或类似内容的方法。我猜设计的原因是性能。如果他们今天创建了它&#xff0c;他们可能…

LeetCode 329. 矩阵中的最长递增路径(记忆化递归)

文章目录1. 题目2. 解题2.1 记忆化递归2.2 拓扑排序1. 题目 给定一个整数矩阵&#xff0c;找出最长递增路径的长度。 对于每个单元格&#xff0c;你可以往上&#xff0c;下&#xff0c;左&#xff0c;右四个方向移动。 你不能在对角线方向上移动或移动到边界外&#xff08;即…

java管理员模块设计_通俗易懂权限管理模块设计 - Java

最近一直在做CMS系统&#xff0c;发现一些内容其实都是重复出现的&#xff0c;例如权限管理模块。权限管理模块就是为了管理用户是否有权利访问某个权限&#xff0c;如果不能则拒绝访问。其实Java中已经有很成熟的权限管理框架&#xff0c;例如Shiro&#xff0c;spring Securit…

LeetCode MySQL 1527. Patients With a Condition(like)

文章目录1. 题目2. 解题1. 题目 Table: Patients ----------------------- | Column Name | Type | ----------------------- | patient_id | int | | patient_name | varchar | | conditions | varchar | ----------------------- patient_id is the primary ke…

LeetCode MySQL 550. 游戏玩法分析 IV

文章目录1. 题目2. 解题1. 题目 Table: Activity ----------------------- | Column Name | Type | ----------------------- | player_id | int | | device_id | int | | event_date | date | | games_played | int | ----------------------- &…

LeetCode MySQL 574. 当选者

文章目录1. 题目2. 解题1. 题目 表: Candidate -------------- | id | Name | -------------- | 1 | A | | 2 | B | | 3 | C | | 4 | D | | 5 | E | -------------- 表: Vote ------------------- | id | CandidateId | ---…