2024.1.21力扣每日一题——分割数组的最大值

2024.1.21

      • 题目来源
      • 我的题解
        • 方法一 动态规划+前缀和
        • 方法二 贪心+二分
        • 方法三 贪心+二分(自己的)

题目来源

力扣每日一题;题序:410

我的题解

方法一 动态规划+前缀和

参考官方题解

令 dp[i][j]表示将数组的前 i 个数分割为 j段所能得到的最大连续子数组和的最小值。在进行状态转移时,我们可以考虑第 j段的具体范围,即我们可以枚举 k,其中前 k个数被分割为 j−1段,而第 k+1 到第 i个数为第 j段。此时,这 j 段子数组中和的最大值,就等于 dp[k][j−1] 与 preSum(k+1,i) 中的较大值,其中 preSum(i,j)表示数组 nums 中下标落在区间 [i,j]内的数的和。

时间复杂度:O( n 2 m n^2m n2m)
空间复杂度:O(nm)

public int splitArray(int[] nums, int m) {int n = nums.length;int[][] dp = new int[n + 1][m + 1];for (int i = 0; i <= n; i++) {Arrays.fill(dp[i], Integer.MAX_VALUE);}//求前缀和int[] preSum = new int[n + 1];for (int i = 0; i < n; i++) {preSum[i + 1] = preSum[i] + nums[i];}dp[0][0] = 0;for (int i = 1; i <= n; i++) {for (int j = 1; j <= Math.min(i, m); j++) {for (int k = 0; k < i; k++) {dp[i][j] = Math.min(dp[i][j], Math.max(dp[k][j - 1], preSum[i] - preSum[k]));}}}return dp[n][m];
}
方法二 贪心+二分

参考官方题解。

时间复杂度:O(n×log(sum−maxn))
空间复杂度:O(1)

public int splitArray(int[] nums, int m) {int left = 0, right = 0;for (int i = 0; i < nums.length; i++) {right += nums[i];if (left < nums[i]) {left = nums[i];}}while (left < right) {int mid = (right - left) / 2 + left;if (check(nums, mid, m)) {right = mid;} else {left = mid + 1;}}return left;
}public boolean check(int[] nums, int x, int m) {int sum = 0;int cnt = 1;for (int i = 0; i < nums.length; i++) {if (sum + nums[i] > x) {cnt++;sum = nums[i];} else {sum += nums[i];}}return cnt <= m;
}
方法三 贪心+二分(自己的)

两个变量need和cur,分别表示需要的子数组数量和当前子数组的元素之和。
接下来,代码遍历数组nums中的每个元素num。如果cur加上num大于mid,则需要增加一个子数组,将cur重置为0。然后将num加到cur上。
最后,如果need小于等于k,则说明当前的mid满足条件,将right更新为mid;否则,将left更新为mid+1。
循环结束后,返回left作为结果。

时间复杂度:O(nlogm)。n为数组长度,m为 数组之和-数组中的最大值
空间复杂度:O(1)

public int splitArray(int[] nums, int k) {int left=Arrays.stream(nums).max().getAsInt();int right=Arrays.stream(nums).sum();while(left<right){int mid=left+((right-left)>>1);int need=1;int cur=0;for(int num:nums){if(cur+num>mid){need++;cur=0;}cur+=num;}if(need<=k)right=mid;elseleft=mid+1;}return left;
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

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

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

相关文章

AI教我学编程之C#类的实例化与访问修饰符

前言 在这篇文章中&#xff0c;我将带大家深入了解C#编程语言的核心概念&#xff0c;包括类的实例化、访问修饰符的应用&#xff0c;以及C#中不同数据类型的默认值。我会通过逐步分析和具体实例&#xff0c;详细解释如何在C#中正确创建和操作对象&#xff0c;并探讨如何通过访…

chatgpt和文心一言哪个更好用?更智能?

我来分别对CHATGPT和文心一言在智能回复、语言准确性和知识库丰富度等方面进行描述和对比。 智能回复&#xff1a; CHATGPT&#xff1a;由于是基于OpenAI的大模型训练而成&#xff0c;CHATGPT具备强大的智能回复能力。它可以理解上下文、推理和表达观点&#xff0c;能够提供准…

维基百科推广的12种方法帮你建立强大的品牌-华媒舍

维基百科是全球最大、最权威的多语言网络百科全书。它是许多人搜索信息、获取知识的首选平台&#xff0c;也是许多品牌建立强大影响力的重要途径。本文将介绍维基百科推广的12种方法&#xff0c;帮助你在维基百科上建立强大的品牌形象。 1. 准备工作 在开始维基百科推广之前&a…

IDEA怎么用Devtools热部署

IDEA怎么用Devtools热部署 大家知道在项目开发过程中&#xff0c;有时候会改动代码逻辑或者修改数据结构&#xff0c;为了能使改动的代码生效&#xff0c;往往需要重启应用查看改变效果&#xff0c;这样会相当耗费时间。 重启应用其实就是重新编译生成新的Class文件&#xff0…

机器学习:何为监督学习和无监督学习

目录 一、监督学习 &#xff08;一&#xff09;回归 &#xff08;二&#xff09;分类 二、无监督学习 聚类 一、监督学习 介绍&#xff1a;监督学习是指学习输入到输出&#xff08;x->y&#xff09;映射的机器学习算法&#xff0c;监督即理解为&#xff1a;已知正确答案…

C语言总结十一:自定义类型:结构体、枚举、联合(共用体)

本篇博客详细介绍C语言最后的三种自定义类型&#xff0c;它们分别有着各自的特点和应用场景&#xff0c;重点在于理解这三种自定义类型的声明方式和使用&#xff0c;以及各自的特点&#xff0c;最后重点掌握该章节常考的考点&#xff0c;如&#xff1a;结构体内存对齐问题&…

C++PythonC# 三语言OpenCV从零开发(5):ROI截取

文章目录 前言ROI测试图片部分区域截取CCsharpPython 颜色区域分割CCsharpPython 颜色通道合并CCsharpPython 总结 前言 C&Python&Csharp in OpenCV 专栏 【2022B站最好的OpenCV课程推荐】OpenCV从入门到实战 全套课程&#xff08;附带课程课件资料课件笔记&#xff09…

Mybatis Plus baomidou EasyCode插件自动生成驼峰字段实体类,而不是全小写字段实体类

开发环境&#xff1a; springboot 2.4.3baomidou 3.4.0mybatis plus 3.4.0jdk8 问题描述&#xff1a; 1、mybatis 使用baomidou 插件&#xff0c;EasyCode自动生成实体类&#xff0c;但字段都是全部小写的&#xff0c;不太符合编码规范。 2、mysql表字段全是驼峰&#xff0c…

java基础05-int 和 Integer 有什么区别?

int 和 Integer 有什么区别&#xff1f; &#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f…

大数据技术原理及应用课实验3 :熟悉常用的HBase操作

目录 实验3 熟悉常用的HBase操作 一、实验目的 二、实验平台 三、实验步骤&#xff08;每个步骤下均需有运行截图&#xff09; &#xff08;一&#xff09;编程实现以下指定功能&#xff0c;并用Hadoop提供的HBase Shell命令完成相同任务&#xff1a; 1.列出HBase所有的表…

代码随想录算法训练营第五十二天| 300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组

代码随想录算法训练营第五十二天| 300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组 题目 300.最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&…

科大讯飞将于1月30日发布星火大模型 V3.5,基于全国产化算力底座训练

科大讯飞即将发布全新AI大模型——星火认知大模型 V3.5&#xff0c;该模型将于14:00正式发布。据透露&#xff0c;相比于去年10月24日发布的V3.0版本&#xff0c;V3.5在逻辑推理、文本生成、数学答题及小样本学习能力上均实现了显著提升。 科大讯飞官网链接&#xff1a;讯飞星…

Leetcode的AC指南 —— 栈与队列:20. 有效的括号

摘要&#xff1a; **Leetcode的AC指南 —— 栈与队列&#xff1a;20. 有效的括号 **。题目介绍&#xff1a;给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字…

统计指定整数的二进制中1的个数

package com.zttexercise;public class test {public static void main(String[] args) {int n125;int retbitCount(125);System.out.printf("整数%d存在%d个1\n",n,ret);System.out.printf("整数%d存在%d个1\n",n,Integer.bitCount(n));// TODO Auto-gene…

901. 滑雪

#include<bits/stdc.h>using namespace std;const int N310;int n,m; int g[N][N];//高度数组 int f[N][N];//答案数组int dx[4]{-1,0,1,0},dy[4]{0,1,0,-1};int dp(int x,int y) {int &vf[x][y];if(v!-1) return v;v1;for(int i0;i<4;i){int axdx[i],bydy[i];i…

推荐收藏!Python Flask 项目生产环境部署指南

Flask 是一个轻量级的 Python web 框架&#xff0c;适合快速地开发小型到中型的web应用。 本文将详细介绍如何将Flask应用部署到生产环境中。文末有技术交流和练手项目&#xff0c;喜欢去练习一下 开始之前 在部署Flask应用之前&#xff0c;确保你有以下几点&#xff1a; 一…

CMeet系列技术生态沙龙---城市开发者组织年度聚会·杭州 《把握未来趋势,持续学习创新》

CSDN始终致力于促进城市区域内尖端新兴技术开发者交流,提供开放自由的切磋平台。在这个充满挑战和机遇的一年即将结束之际&#xff0c;通过本次聚会&#xff0c;汇聚杭州本地各行各业的开发者朋友&#xff0c;回顾过去一年城市社区的成就和收获&#xff0c;感谢携手同行的各位,…

Vue-Router: 如何使用路由钩子函数来处理路由变化

Vue-Router 是 Vue.js 官方的路由管理插件&#xff0c;它能够帮助我们在 Vue.js 应用中实现单页应用的路由功能。除了基本的路由导航功能外&#xff0c;Vue-Router 还提供了一系列的钩子函数&#xff0c;让我们能够在路由变化时进行相应的操作。本文介绍 Vue-Router 的钩子函数…

makefile的机制,执行命令的流程分析

makefile的机制&#xff0c;流程分析 calc:add.o sub.o multi.ogcc add.o sub.o multi.o calc.cpp -o calcadd.o:add.cppgcc -c add.cpp -o add.osub.o:sub.cppgcc -c sub.cpp -o sub.omulti.o:multi.cppgcc -c multi.cpp -o multi.oclean:rm -rf *.o calc按照这个例子分析&am…

常见网站结构

网站架构与部署架构 1、初始阶段的网站架构 一般来讲&#xff0c;大型网站都是从小型网站发展而来&#xff0c;一开始的架构都比较简单&#xff0c;随着业务复杂和用户量的激增&#xff0c;才开始做很多架构上的改进。当它还是小型网站的时候&#xff0c;没有太多访客&#…