当前位置: 首页 > news >正文

LeetCode 410. 分割数组的最大值

一、题目

1、题目描述

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

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

2、接口描述

class Solution {
public:int splitArray(vector<int>& nums, int k) {}
};

3、原题链接

410. Split Array Largest Sum


二、解题报告

1、思路分析

看到”最大的最小“自然想到二分

那么关键就在于给定x,如何判断原数组是否能够划分为最大值不超过x的k个子数组

我们贪心地思考,如果原数组能够划分为最大值不超过x的j个子数组,j < k,那么一定也可以通过拆解某些子数组从而得到k个子数组

所以我们的check函数,遍历数组,贪心累加,如果sum > x,我们就cnt + 1,然后sum = x

最终取决于cnt <= k

很经典的二分+贪心的题目

2、复杂度

时间复杂度:O(n) 空间复杂度:O(1)

3、代码详解

 
class Solution {
public:int splitArray(vector<int>& nums, int k) {int r = 0 , l = 0;for(auto x : nums) r += x , l = max(l , x);function<bool(int)> check = [&](int t){int cnt = 1 , s = 0;for(auto x : nums){if(s + x > t)s = x , cnt++;elses += x;}return cnt <= k;};while(l < r){int mid = (l + r) >> 1;if(check(mid)) r = mid;else l = mid + 1;}return r;}
};

http://www.lryc.cn/news/286321.html

相关文章:

  • linux shell脚本 基础认识
  • 一文(10图)了解Cornerstone3D核心概念(万字总结附导图)
  • 牛客网-----跳石头
  • 用ChatGPT教学、科研!大学与OpenAI合作
  • 运维平台介绍:视频智能运维平台的视频质量诊断分析和告警中心
  • GAMES104-现代游戏引擎:从入门到实践 - 物理引擎课程笔记汇总
  • 【linux】Xorg的工作原理
  • 02-docker下部署seata
  • 回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测
  • 精益生产咨询背后的秘密:企业如何实现价值最大化
  • 创建SERVLET
  • python算法与数据结构(搜索算法和拓扑排序算法)---深度优先搜索
  • thinkphp5实战之phpstudy v8环境搭建,解决Not Found找不到路径问题
  • fastjson-BCEL不出网打法原理分析
  • 部署mysql主从同步,部署mysql数据读写分离结构+mycat2
  • 【最新!超详细C++入门】
  • 【Linux】【实战系列】10 分钟掌握日常开发中 Linux 网络处理相关命令
  • 语义分割常用评价指标
  • 从0开始学习C++ 第一课:你的第一个C++程序
  • Dubbo-admin监控中心
  • 216. 组合总和 III - 力扣(LeetCode)
  • LeetCode-题目整理【5】:O(1) 时间插入、删除和获取随机元素
  • 服务器感染了.wis[[Rast@airmail.cc]].wis勒索病毒,如何确保数据文件完整恢复?
  • ContentNegotiationManagerFactoryBean 内容协商
  • html css js 开发一个猜数字游戏
  • HDD 东山再起,单块 30TB 起步新品想要颠覆储存行业
  • 【网络安全】-基本工具msf
  • Vue3的ref和reactive
  • Flink编程——风险欺诈检测
  • Day37 贪心算法 part06 738. 单调递增的数字 968. 监控二叉树