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

LeetCode讲解篇之1043. 分隔数组以得到最大和

文章目录

  • 题目描述
  • 题解思路
  • 题解代码
  • 题目链接

题目描述

在这里插入图片描述

题解思路

对于这题我们这么考虑,我们选择以数字的第i个元素做为分隔子数组的右边界,我们需要计算当前分隔子数组的长度为多少时能让数组[0, i]进行分隔数组的和最大

我们用数组f表示[0, i)区间内的分隔数组的最大和

那么数组[0, i]进行分隔数组的最大和 = 最后一个子数组区间分别为[i - 1, i]、 [i - 2, i]、 … 、[i - k + 1, i]时能得到[0, i]范围内分隔数组的最大值的最大值
即f[i] = f[j] + (i - j) * maxVal,其中j为最后一个子数组区间的左边界,maxVal为[j, i]范围内arr数组的最大值

题解代码

func maxSumAfterPartitioning(arr []int, k int) int {n := len(arr)// [0, i)区间内的分隔数组的最大和f := make([]int, n + 1)for i := 1; i <= n; i++ {maxVal := arr[i - 1]for j := i - 1; j >= 0 && j >= i - k; j-- {f[i] = max(f[i], f[j] + (i - j) * maxVal)if j > 0 && arr[j - 1] > maxVal {maxVal = arr[j - 1]}}}return f[n]
}

题目链接

https://leetcode.cn/problems/partition-array-for-maximum-sum/

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

相关文章:

  • Python知识点:结合Python工具,如何使用TfidfVectorizer进行文本特征提取
  • Diffusion models(扩散模型) 是怎么工作的
  • 查找回收站里隐藏的文件
  • [运维]2.elasticsearch-svc连接问题
  • Ajax面试题:(第一天)
  • 数据仓库拉链表
  • 【JVM】实战篇
  • 2024年9月30日--10月6日(ue5肉鸽结束)
  • 【Python游戏开发】贪吃蛇游戏demo
  • pytorch张量基础
  • 深入解析LlamaIndex Workflows【下篇】:实现ReAct模式AI智能体的新方法
  • 要在 Git Bash 中使用 `tree` 命令,下载并手动安装 `tree`。
  • Linux的基本指令(1)
  • JavaEE之多线程进阶-面试问题
  • 费曼学习法没有输出对象怎么办?
  • Hive优化操作(二)
  • 销冠的至高艺术:让自己不像销售
  • Hive数仓操作(十一)
  • C语言初步介绍(初学者,大学生)【上】
  • 陈文自媒体:现在的房价,已经跌到7年前!
  • 基于STM32的智能水族箱控制系统设计
  • java语言基础案例-cnblog
  • MyBatis-Plus 之 typeHandler 的使用
  • HDLBits中文版,标准参考答案 |2.5 More Verilog Features | 更多Verilog 要点
  • 提升开机速度:有效管理Windows电脑自启动项,打开、关闭自启动项教程分享
  • 数据库简单介绍
  • 运用MinIO技术服务器实现文件上传——利用程序上传图片(二 )
  • C语言 | Leetcode C语言题解之第461题汉明距离
  • Qt 3D、QtQuick、QtQuick 3D 和 QML 的关系
  • 软件设计师(软考学习)