leetcode - 分割数组的最大值
时间:2022-07-22
本文章向大家介绍leetcode - 分割数组的最大值,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目描述
给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。
注意:数组长度 n 满足以下条件:
1 ≤ n ≤ 10001 ≤ m ≤ min(50, n)
示例
输入:nums = [7,2,5,10,8]m = 2
输出:18
解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分为[7,2,5] 和 [10,8],因为此时这两个子数组各自的和的最大值为18,在所有情况中最小。
题解
第一点,被分成的m个子数组的最大值必在nums的最大值和nums的元素之和之中。第二点,弱弱地猜猜看,拿所在区间范围的中间值去套,看看其能够得到多少个子区间数,如果说所得到的子区间数偏大于m,说明你划分的太小了,令左区间等于中间值加1,反之相反。
/**
* @param {number[]} nums
* @param {number} m
* @return {number}
*/
var splitArray = function(nums, m) {
var left = Math.max(...nums);
var right = nums.reduce((pre, cur) => pre + cur);
if (nums.length === m) {
return left;
}
if (m === 1) {
return right;
}
while(left < right) {
var mid = (left + right) >> 1;
var cnt = 1;
var sum = 0;
for (const val of nums) {
if (sum + val > mid) {
sum = 0;
cnt++;
}
sum += val;
}
if (cnt > m) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
};
代码地址: https://zhengjiangtao.cn/coding/interview/split_array.js
项目地址: https://zhengjiangtao.cn/coding/interview/split_array.js
参考文献
410.分割数组的最大值(leetcode) :https://leetcode-cn.com/problems/split-array-largest-sum
- js也可以有自定义事件 注入就是这么爽
- Python基础05 缩进和选择
- Python基础04 运算
- 剑指OFFER之二叉树中和为某一值的路径(九度OJ1368)
- Python基础03 序列
- Python基础02 基本数据类型
- 用命令重启IIS 常重启IIS的朋友看过来
- Python基础01 Hello World!
- 剑指OFFER之从上往下打印二叉树(九度OJ1523)
- 给你的博客加上“Fork me on Github”彩带
- Android Studio添加PNG图片报错原因
- 剑指OFFER之包含min函数的栈(九度OJ1522)
- 使用VS2010开发Qt程序的一点经验
- 用Qt写软件系列五:一个安全防护软件的制作(3)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法