2022-05-06:给你一个整数数组 arr,请你将该数组分隔为长度最多为 k 的一些(连续)子数组。分隔完成后,每个子数组的中的所有值都会变为该子数组中的最大值。 返回将数组分隔变换后能够得到的元
2024-10-21 17:47:11
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面试题——集合框架
- linux安装nexus
- URL特殊字符的转义
- iOS:Autolayout自动布局实例
- ios NSHashTable &; NSMapTable
- 拆分字符串,GetHtmlByWebBrowser,UnicodeToMBCS,提升进程权限
- 【cocos2d-js公文】十八、Cocos2d-JS v3.0物业风格API
- Linux Kernel Vhost 架构
- 201521123093 java 第十四周学习总结
- BZOJ 1086: [SCOI2005]王室联邦 [树上分块]
- Mysql创建索引
- sql语句修改字段类型和增加字段
- Taro父子组件通信
- node多人聊天室搭建
- case class 和class的区别以及构造器参数辨析
- Django模型层(2)
- mysql解除死锁状态
- 【LeetCode每天一题】Longest Palindromic Substring(最长回文字串)
- Python 高级编程 ——观察者模式
- python将控制台输出保存至文件
热门文章
- 后端004-JWT工具类的编写
- OO多项式求导作业总结
- 操作kubernets(k8s)的增删改查
- 【建造者设计模式详解】Java/JS/Go/Python/TS不同语言实现
- 自己动手从零写桌面操作系统GrapeOS系列教程——15.用汇编向屏幕输出字符
- Windows10一劳永逸的禁止更新/恢复更新
- Web 开发的常规流程
- MyBatis各个版本下载 以及 Apache Maven 安装
- 全网最详细中英文ChatGPT-GPT-4示例文档-事实性回答应用从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)
- LeetCode刷题笔记 - 2022