leetcode410. 分割数组的最大值(java)

news2025/1/15 22:33:15

分割数组的最大值

  • 题目描述
    • 二分法
    • 代码演示

题目描述

难度 - 困难
410. 分割数组的最大值

给定一个非负整数数组 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] <= 1e6
1 <= m <= min(50, nums.length)

在这里插入图片描述

二分法

挖掘单调性:使用二分查找的一个前提是「数组具有单调性」,我们就去想想有没有单调性可以挖掘,不难发现:
如果设置「数组各自和的最大值」很大,那么必然导致分割数很小;
如果设置「数组各自和的最大值」很小,那么必然导致分割数很大。

仔细想想,这里「数组各自和的最大值」就决定了一种分割的方法。再联系一下我们刚刚向大家强调的题目的要求 连续 和题目中给出的输入数组的特点: 非负整数数组。
那么,我们就可以通过调整「数组各自和的最大值」来达到:使得分割数恰好为 m 的效果。这里要注意一个问题:

注意事项:如果某个 数组各自和的最大值 恰恰好使得分割数为 m ,此时不能放弃搜索,因为我们要使得这个最大值 最小化,此时还应该继续尝试缩小这个 数组各自和的最大值 ,使得分割数超过 m ,超过 m 的最后一个使得分割数为 m 的 数组各自和的最大值 就是我们要找的 最小值。

这里想不太明白的话,可以举一个具体的例子:
例如:(题目中给出的示例)输入数组为 [7, 2, 5, 10, 8] ,m = 2 。如果设置 数组各自和的最大值 为 21,那么分割是 [7, 2, 5, | 10, 8],此时 m = 2,此时,这个值太大,尝试一点一点缩小:
设置 数组各自和的最大值 为 20,此时分割依然是 [7, 2, 5, | 10, 8],m = 2;
设置 数组各自和的最大值 为 19,此时分割依然是 [7, 2, 5, | 10, 8],m = 2;
设置 数组各自和的最大值 为 18,此时分割依然是 [7, 2, 5, | 10, 8],m = 2;
设置 数组各自和的最大值 为 17,此时分割就变成了 [7, 2, 5, | 10, | 8],这时 m = 3。
m 变成 3 之前的值 数组各自和的最大值 18 是这个问题的最小值,所以输出 18。

代码演示

public int splitArray(int[] nums, int k) {
        int left = 0;
        int right = 0;
        for(int n : nums){
            right += n;
            left = Math.max(left,n);
        }
        while(left < right){
            int mid = left + (right - left) / 2;
            int num = f(nums,mid);
            if(num <= k){
                right = mid;
            }else{
                left = mid + 1;
            }
        }
        return left;
    }

    /**
    * x 是分割的大小。
     */
    public int f(int[]nums,int x){
        int k = 1;
        int count = 0;
        for(int n : nums){
            if(count + n > x){
                k++;
                count = 0;
            }
            count += n;
        }
        return k;
    }

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

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

相关文章

数字化会员系统如何落地?数字化会员运营机制设计方式

对于企业而言&#xff0c;如何对自身客户进行标签划分、挖掘潜在价值并进行后续运营、转化&#xff0c;是每个企业的必修课。在业务开展的过程中&#xff0c;企业也需要知道什么样的客户更值得维护、以及如何让更多的客户发挥更大的价值。因此&#xff0c;不少企业选择开发数字…

驱动开发错误汇编

本博文将会不定期更新。以便记录我的驱动开发生涯中的一些点点滴滴的技术细节和琐事。 生成时link找不到导出函数&#xff0c;比如"LNK2019 无法解析的外部符号 _FltCreateCommunicationPort32"。出现这种情况的原因是&#xff0c;驱动的编译环境忽略了所有的默认库&…

【ppt技巧】PPT文件常见的几种格式有哪些?

PPT文件大家都不陌生&#xff0c;那么PPT文件的几种格式&#xff0c;大家也可以学习一下&#xff1a; .ppt & .pptx 这两种PPT格式是最基本的ppt文件后缀&#xff0c;就是我们普通可以编辑的PPT文件格式&#xff0c;2003版的PowerPoint的文件格式是.ppt&#xff0c;而在0…

VR反欺诈模拟体验:揭秘防骗技巧和方法

在我们的日常生活中&#xff0c;安全问题始终是我们不能忽视的重要环节。尤其是近年来&#xff0c;网络诈骗案件屡见不鲜&#xff0c;给人们的生活带来了极大的困扰。然而&#xff0c;随着科技的发展&#xff0c;一种全新的安全教育方式——VR反欺诈模拟体验&#xff0c;正在逐…

现货白银的优势到底在哪?

现货白银可不是一般的白银投资方式&#xff0c;而是一种具有成熟灵活交易机制&#xff0c;以及高杠杆属性的、优势明显的投资方式&#xff0c;本文将为大家简单的介绍一下它的核心优势&#xff0c;具体体现在哪些地方。 首先&#xff0c;现货白银是采用保证金交易制度的投资品种…

HUT23级训练赛

目录 A - tmn学长的字符串1 B - 帮帮神君先生 C - z学长的猫 D - 这题用来防ak E - 这题考察FFT卷积 F - 这题考察二进制 G - 这题考察高精度 H - 这题考察签到 I - 爱派克斯&#xff0c;启动! J - tmn学长的字符串2 K - 秋奕来买瓜 A - tmn学长的字符串1 思路&#x…

八、隔离式与非隔离式

1、非隔离式拓扑结构 2、隔离式拓扑结构 在一些应用中&#xff0c;输入与输出进行隔离&#xff0c;所以基于buck、boost、buck-boost这三种拓扑&#xff0c;推导出其他拓扑结构&#xff1b; 优点&#xff1a; 保护人员&#xff0c;隔离另一端的危险瞬态电压损害 去除隔离电路…

盲盒电商小程序

一、准备阶段 在开始制作盲盒小程序前&#xff0c;你需要在乔拓云平台上创建一个账号&#xff0c;并登录到后台管理页面。在后台管理页面&#xff0c;你可以找到商城管理模块&#xff0c;点击进入商城编辑制作页面。 二、小程序商城模板选择与编辑 1.在商城编辑制作页面&#x…

为什么学校互联网专业教的只是出社会都没用?

今日话题&#xff0c;为什么很多学生都觉得认真学习了学校课程&#xff0c;但是出社会企业发现一点用都没有&#xff1f;解决方法放在了后方&#xff0c;免费领取。首先&#xff0c;计算机技术的迅猛发展导致学校教材和课程更新滞后&#xff0c;可能学到的知识已是老旧。嵌入式…

opencv 案例05-基于二值图像分析(简单缺陷检测)

缺陷检测&#xff0c;分为两个部分&#xff0c;一个部分是提取指定的轮廓&#xff0c;第二个部分通过对比实现划痕检测与缺角检测。本次主要搞定第一部分&#xff0c;学会观察图像与提取图像ROI对象轮廓外接矩形与轮廓。 下面是基于二值图像分析的大致流程 读取图像将图像转换…

钉钉小程序引用阿里巴巴图标

2.打开的界面如图&#xff0c;先建一个iconfont.acss文件&#xff0c;全选浏览器打开的样式代码&#xff0c;复制粘贴进新建的iconfont.acss文件中 3.使用

数据安全治理现状研究与分析

近年来&#xff0c;国内外数据泄露事件频发&#xff0c;大量企业的商业利益、声誉受损。数据安全法律法规相继颁布&#xff0c;监管力度不断升级&#xff0c;企业逐渐意识到数据安全治理的重要性与紧迫性。通过对2021年开展的企业数据安全治理能力评估现状进行整理&#xff0c;…

OpenGL精简案例二

文章目录 书接上回OpenGL图片渲染Renderer程序基类颜色程序图片程序应用场景glsl 解析变量限定符 书接上回 OpenGL精简案例一 OpenGL图片渲染 Renderer public class FRenderer implements GLSurfaceView.Renderer {private String TAG "Qm";private Context cont…

探索Python的魔法世界,开启编程奇幻之旅!

无需魔杖&#xff0c;只需键盘&#xff0c;Python将带你进入一个充满奇幻和创造力的世界。本篇博客将引领你走进Python的魔法大门&#xff0c;从编程新手蜕变为编码魔法师&#xff0c;开启一段激动人心的编程奇幻之旅。 &#x1f340;引言 如果你是一名编程初学者&#xff0c;并…

16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Apache Hive示例(6)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

strtok, strtok_s(字符串分割符)和memset_s

strtok()函数的原型如下 char *__cdecl strtok(char *_String, const char *_Delimiter)strtok()函数接收两个传入参数&#xff0c;将_String中保存的字符串&#xff08;待处理字符串&#xff09;&#xff0c;按照_Delimiter中的字符作为分隔符进行分割。如果_String为空&…

亚马逊,速卖通,美客多不出单怎么办?测评补单专治出单难

亚马逊不出单怎么办? 一、广告优化 虽然现在平台内部的流量都大幅度减少&#xff0c;但是不能停止对广告的投放&#xff0c;并且更需要你花时间去优化和分析广告报表。如果广告报表显示所有的关键词曝光量都非常低&#xff0c;卖家就需要提高竞价了&#xff0c;这时候你可以…

idea配置注释模板

一、类的模板 设置里面依次找到图中标注的地方 填入 /** ${describe} author 填入你的名字 date ${YEAR}-${MONTH}-${DAY} ${TIME} version 1.0.0 */配置完成后&#xff0c;新创建的类就会自动生成类开头的注释 二、方法的注释模板 如图创建模板 步骤6中填入 *** $descrip…

AP5192 DC-DC降压恒流LED汽车头灯摩托车电动车大灯电源驱动

AP5192是一款PWM工作模式,高效率、外围简单、 内置功率MOS管&#xff0c;适用于4.5-100V输入的高精度 降压LED恒流驱动芯片。最大电流1.5A。 AP5192可实现线性调光和PWM调光&#xff0c;线性调光 脚有效电压范围0.55-2.6V. AP5192 工作频率可以通过RT 外部电阻编程 来设定&…

基于负载均衡的在线OJ实战项目

前言&#xff1a; 该篇讲述了实现基于负载均衡式的在线oj&#xff0c;即类似在线编程做题网站一样&#xff0c;文章尽可能详细讲述细节即实现&#xff0c;便于大家了解学习。 文章将采用单篇不分段形式&#xff08;ps&#xff1a;切着麻烦&#xff09;&#xff0c;附图文&#…