2022-05-06:给你一个整数数组 arr,请你将该数组分隔为长度最多为 k 的一些(连续)子数组。分隔完成后,每个子数组的中的所有值都会变为该子数组中的最大值。
返回将数组分隔变换后能够得到的元素最大和。
注意,原数组和分隔后的数组对应顺序应当一致,也就是说,你只能选择分隔数组的位置而不能调整数组中的顺序。
输入:arr = [1,15,7,9,2,5,10], k = 3。
输出:84。
解释:
因为 k=3 可以分隔成 [1,15,7] [9] [2,5,10],结果为 [15,15,15,9,10,10,10],和为 84,是该数组所有分隔变换后元素总和最大的。
若是分隔成 [1] [15,7,9] [2,5,10],结果就是 [1, 15, 15, 15, 10, 10, 10] 但这种分隔方式的元素总和(76)小于上一种。
力扣1043. 分隔数组以得到最大和。

答案2022-05-06:

从左往右的尝试模型。0到i记录dp[i]。
假设k=3,分如下三种情况:
1.i单个一组dp[i]=[i]+dp[i-1]。
2.i和i-1一组。
3.i和i-1和i-2一组。

代码用rust编写。代码如下:

fn main() {
let mut arr: Vec<isize> = vec![1, 15, 7, 9, 2, 5, 10];
let k: isize = 3;
let answer = max_sum_after_partitioning2(&mut arr, k);
println!("answer = {}", answer);
} fn max_sum_after_partitioning2(arr: &mut Vec<isize>, k: isize) -> isize {
if arr.len() == 0 {
return 0;
}
let n = arr.len() as isize;
let mut dp: Vec<isize> = vec![];
for _i in 0..n {
dp.push(0);
}
dp[0] = arr[0];
for i in 1..n {
dp[i as usize] = arr[i as usize] + dp[(i - 1) as usize];
let mut max = arr[i as usize];
let mut j = i - 1; while j >= 0 && (i - j + 1) <= k {
max = get_max(max, arr[j as usize]);
dp[i as usize] = get_max(
dp[i as usize],
max * (i - j + 1) + if j - 1 >= 0 { dp[(j - 1) as usize] } else { 0 },
);
j -= 1;
}
}
return dp[(n - 1) as usize];
} fn get_max(a: isize, b: isize) -> isize {
if a > b {
a
} else {
b
}
}

执行结果如下:


左神java代码

最新文章

  1. java面试题——集合框架
  2. linux安装nexus
  3. URL特殊字符的转义
  4. iOS:Autolayout自动布局实例
  5. ios NSHashTable &amp; NSMapTable
  6. 拆分字符串,GetHtmlByWebBrowser,UnicodeToMBCS,提升进程权限
  7. 【cocos2d-js公文】十八、Cocos2d-JS v3.0物业风格API
  8. Linux Kernel Vhost 架构
  9. 201521123093 java 第十四周学习总结
  10. BZOJ 1086: [SCOI2005]王室联邦 [树上分块]
  11. Mysql创建索引
  12. sql语句修改字段类型和增加字段
  13. Taro父子组件通信
  14. node多人聊天室搭建
  15. case class 和class的区别以及构造器参数辨析
  16. Django模型层(2)
  17. mysql解除死锁状态
  18. 【LeetCode每天一题】Longest Palindromic Substring(最长回文字串)
  19. Python 高级编程 ——观察者模式
  20. python将控制台输出保存至文件

热门文章

  1. 后端004-JWT工具类的编写
  2. OO多项式求导作业总结
  3. 操作kubernets(k8s)的增删改查
  4. 【建造者设计模式详解】Java/JS/Go/Python/TS不同语言实现
  5. 自己动手从零写桌面操作系统GrapeOS系列教程——15.用汇编向屏幕输出字符
  6. Windows10一劳永逸的禁止更新/恢复更新
  7. Web 开发的常规流程
  8. MyBatis各个版本下载 以及 Apache Maven 安装
  9. 全网最详细中英文ChatGPT-GPT-4示例文档-事实性回答应用从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)
  10. LeetCode刷题笔记 - 2022