Java实现 LeetCode 813 最大平均值和的分组 (DFS+DP记忆化搜索)
2023-09-14 08:58:01 时间
813. 最大平均值和的分组
我们将给定的数组 A 分成 K 个相邻的非空子数组 ,我们的分数由每个子数组内的平均值的总和构成。计算我们所能得到的最大分数是多少。
注意我们必须使用 A 数组中的每一个数进行分组,并且分数不一定需要是整数。
示例:
输入:
A = [9,1,2,3,9]
K = 3
输出: 20
解释:
A 的最优分组是[9], [1, 2, 3], [9]. 得到的分数是 9 + (1 + 2 + 3) / 3 + 9 = 20.
我们也可以把 A 分成[9, 1], [2], [3, 9].
这样的分组得到的分数为 5 + 2 + 6 = 13, 但不是最大值.
说明:
1 <= A.length <= 100.
1 <= A[i] <= 10000.
1 <= K <= A.length.
答案误差在 10^-6 内被视为是正确的。
class Solution {
public double largestSumOfAverages(int[] A, int K) {
int N = A.length;
double[][] memo = new double[N+1][N+1];
double cur = 0;
for (int i = 0; i < N; ++i) {
cur += A[i];
memo[i + 1][1] = cur / (i + 1);
}
return search(N, K, A, memo);
}
public double search(int n, int k, int[] A, double[][] memo) {
if (memo[n][k] > 0) return memo[n][k];
if (n < k) return 0;
double cur = 0;
for (int i = n - 1; i > 0; --i) {
cur += A[i];
memo[n][k] = Math.max(memo[n][k], search(i, k - 1, A, memo) + cur / (n - i));
}
return memo[n][k];
}
}
相关文章
- Java异常处理简单实例
- java random函数用法_JAVA的Random类的用法详解[通俗易懂]
- java xml解析框架_JAVA解析xml的五种方式对比
- java 论坛_5 个最好用的 Java 开源论坛系统
- java语言的平台无关性是指什么,《深入Java虚拟机》学习笔记二:平台无关性
- JAVA代码—最简单的九九乘法表
- Java递归详解_java难不难学
- java小技能:对list集合根据条件进行分组、过滤和字段筛选
- Java 数组、排序和查找
- 【Java AWT 图形界面编程】Frame 窗口标题栏大小问题 ( Container 容器的空白边框 Insets | 通过调用 frame.getInsets().top 获取窗口标题栏高度 )
- centos7 java -verison Error: Could not create the Java Virtual Machine.
- java基础之反射机制详解编程语言
- java中的IO流部分(FIle对象递归文件列表)详解编程语言
- Java连接MySQL:实现数据互通(java如何连接mysql)
- Linux平台上Java新版本发布(linux发布java)
- Linux下查看Java进程的方法(linux查看java进程)
- Java远程登录Linux服务器入门指南(java远程linux)
- Java程序构建基于Redis的缓存系统(java用redis)
- Java如何在Linux下运行?(java执行linux)
- Linux测试搭配Java快速实现稳定性验证(linux测试java)
- Java与Oracle 一种天生的结合(java属于oracle)
- Oracle中Java虚拟机的应用与研究(oracle中jvm)
- [JAVA]十四种Java开发工具点评
- java中把汉字转换成简拼的实现代码
- java中实现汉字按照拼音排序(示例代码)