【划分型DP-约束划分个数】【hard】力扣410. 分割数组的最大值

给定一个非负整数数组 nums 和一个整数 k ,你需要将这个数组分成 k 个非空的连续子数组,使得这 k 个子数组各自和的最大值 最小。

返回分割后最小的和的最大值。

子数组 是数组中连续的部份。

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

示例 2:
输入:nums = [1,2,3,4,5], k = 2
输出:9

示例 3:
输入:nums = [1,4,4], k = 3
输出:4
在这里插入图片描述

二分查找+贪心

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

时间复杂度:O(n×log(sum−maxn)),其中 sum 表示数组 nums 中所有元素的和,maxn 表示数组所有元素的最大值。每次二分查找时,需要对数组进行一次遍历,时间复杂度为 O(n),因此总时间复杂度是 O(n×log(sum−maxn))。

空间复杂度:O(1)。

这道题的目的就是要找出连续子数组的最大值,那么我们可以思考,我们是不是可以假设一个最大值,然后看一下如果要让子数组分割的最大值不超过假定的最大值,那么要分割几次。于是我们就可以在check函数中使用贪心的思路来计算出要满足假定的最大值,最少需要分割cnt次。

一旦分割的次数小于等于题目要求的k的话,那么就说明假定的最大值大于等于实际的最大值,那么就让right = mid,这样才可以让接下来假定的最大值变小。反过来,如果cnt大于k,那么就要让left = mid + 1,让接下来的mid变大。

当left = right的时候,就说明假定的最大值就是实际的最大值。

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

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

相关文章

CentOS 源码安装FFmpeg

FFmpeg离线包&#xff1a;浏览 Index of /releases 【下载】 配套组件yasm下载 【yasm-1.3.0.tar.gz】 tar zxvf yasm-1.3.0.tar.gz cd yasm-1.3.0/ && ./configure --prefix/usr/local/yasm make -j8 sudo make installecho "PATH$PATH:/usr/local/yasm/bin&quo…

在 Service Worker 中caches.put() 和 caches.add()/caches.addAll() 方法他们之间的区别

在 Service Worker 中&#xff0c;caches.put(request, response) 和 caches.add(request)/caches.addAll(requests) 方法都用于将资源添加到缓存中&#xff0c;但它们的使用场景和目的略有不同。 caches.put(request, response)&#xff0c;一用在fetch事件当中&#xff0c;由…

Linux学习,man 命令

Linux man 命令是 "manual" 单词的缩写&#xff0c;用于查看各种命令、函数和配置文件的手册页面。Linux man 命令是 Linux 和 Unix 类操作系统中的一个非常有用的工具&#xff0c;用于显示手册页&#xff08;man pages&#xff09;。手册页提供了关于系统命令、编程…

python高级之面向对象编程

一、面向过程与面向对象 面向过程和面向对象都是一种编程方式&#xff0c;只不过再设计上有区别。 1、面向过程pop&#xff1a; 举例&#xff1a;孩子上学 1. 妈妈起床 2. 妈妈洗漱 3. 妈妈做饭 4. 妈妈把孩子叫起来 5. 孩子起床 6. 孩子洗漱 7. 孩子吃饭 8. 妈妈给孩子送学校…

TypeORM在Node.js中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 TypeORM在Node.js中的应用 TypeORM在Node.js中的应用 TypeORM在Node.js中的应用 引言 TypeORM 概述 定义与原理 发展历程 TypeO…

shell脚本(1)

免责声明 学习视频来自B 站up主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下代码、网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 Shell脚本 建立一个sh脚本…

《DiffusionDet: Diffusion Model for Object Detection》ICCV2023

摘要 本文提出了一种新的框架DiffusionDet&#xff0c;它将目标检测任务表述为从带噪声的边界框到目标边界框的去噪扩散过程&#xff08;如图一所示&#xff09;。在训练阶段&#xff0c;目标边界框逐渐扩散到随机分布&#xff0c;模型学习逆转这一加噪过程。在推理阶段&#…

ISAAC SIM踩坑记录--ROS2相机影像发布

其实这个例子官方和大佬NVIDIA Omniverse和Isaac Sim笔记5&#xff1a;Isaac Sim的ROS接口与相机影像、位姿真值发布/保存都已经有详细介绍了&#xff0c;但是都是基于ROS的&#xff0c;现在最新的已经是ROS2&#xff0c;这里把不同的地方简单记录一下。 搭建一个简单的场景&a…

Leetcode 905 Sort Array By Parity

题意&#xff1a;一个数组&#xff0c;把偶数放在前面&#xff0c;奇数放在后面, 并且顺序不影响答案&#xff0c;返回一个满足条件的解就可以 https://leetcode.com/problems/sort-array-by-parity/description/ 题解&#xff1a;对撞双指针&#xff0c;前面的指针遇到奇数停…

outlook邮箱关闭垃圾邮件——PowerAutomate自动化任务

微软邮箱反垃圾已经很强大了非常敏感&#xff0c;自家的域名的邮件都能给扔到垃圾邮箱里&#xff0c;但还是在本地增加了一层垃圾邮箱功能&#xff0c;然后垃圾邮箱并没有提示&#xff0c;导致错过很多通知&#xff0c;本身并没有提供关闭的功能&#xff0c;但微软有个Microsof…

「Py」Python基础篇 之 Python都可以做哪些自动化?

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「Py」Python程序设计&#x1f4da;全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定…

candence: 原理图生成网表时报错:Duplicate Pin name “xxx“

原理图生成网表时报错&#xff1a;Duplicate Pin name “xxx” 这个错误的意思是&#xff0c;原理图中管脚命名重复 解决这个问题的方法&#xff1a; 1、绘制元件的时候不要用相同的管脚名&#xff0c;比如GND等的&#xff0c;就稍加个后缀做区分2、就是将管脚属性修改为 &qu…

Diffusion Policy——斯坦福机器人UMI所用的扩散策略:从原理到其编码实现(含Diff-Control、ControlNet详解)

前言 本文一开始是属于此文《UMI——斯坦福刷盘机器人&#xff1a;从手持夹持器到动作预测Diffusion Policy(含代码解读)》的第三部分&#xff0c;考虑后Diffusion Policy的重要性很高&#xff0c;加之后续还有一系列基于其的改进工作 故独立成本文&#xff0c;且写的过程中 …

计算机网络学习笔记-3.2介质访问控制

文章目录 介质访问控制静态划分信道 动态分配信道轮询访问介质访问控制随机访问介质访问控制ALOHA协议简介ALOHA协议的工作原理 介质访问控制 介质访问控制&#xff08;MAC&#xff0c;Medium Access Control&#xff09;&#xff0c;质访问控制的目的是确保多个设备能够高效、…

GitCode光引计划有奖征文大赛

一、活动介绍 GitCode平台汇聚了众多杰出的G-Star项目&#xff0c;它们犹如璀璨星辰&#xff0c;用各自的故事和成就&#xff0c;为后来者照亮前行的道路。我们诚邀广大开发者、项目维护者及爱好者&#xff0c;共同撰写并分享项目在GitCode平台上托管的体验&#xff0c;挖掘平…

深入理解接口测试:实用指南与最佳实践5.0(三)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

Python实现云原生应用的后端开发

目录 1. 云原生后端开发基础2. 云原生架构与核心概念3. Python实现云原生后端应用1. 基本的微服务实现2. 容器化应用&#xff1a;Docker化微服务3. 使用Kubernetes进行部署 4. 云原生后端开发案例与代码实现案例 1&#xff1a;用户认证服务&#xff08;使用策略模式&#xff09…

使用electron-egg把vue项目在linux Ubuntu环境下打包并安装运行

electron-egg一个入门简单、跨平台、企业级桌面软件开发框架https://www.kaka996.com/electron-egg 跳转地址 1,使用 git下载代码到本地,如果没有git需要进行安装 # gitee git clone https://gitee.com/dromara/electron-egg.git # github git clone https://github.com/dro…

linux中报文从网卡到用户态recv的架子

分享一篇后台服务器性能优化之网络性能优化&#xff0c;希望大家对Linux网络有更深的理解。 曾几何时&#xff0c;一切都是那么简单。网卡很慢&#xff0c;只有一个队列。当数据包到达时&#xff0c;网卡通过DMA复制数据包并发送中断&#xff0c;Linux内核收集这些数据包并完成…

2019年下半年试题二:论软件系统架构评估及其应用

论文库链接&#xff1a;系统架构设计师论文 论文题目 对于软件系统&#xff0c;尤其是大规模复杂软件系统而言&#xff0c;软件系统架构对于确保最终系统的质量具有十分重要的意义。在系统架构设计结束后&#xff0c;为保证架构设计的合理性、完整性和针对性&#xff0c;保证系…