题目
https://leetcode.com/problems/largest-sum-of-averages/
![在这里插入图片描述](https://img-blog.csdnimg.cn/7a50044c58c5447bbae963abeafab098.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5a-S5rOJSHE=,size_20,color_FFFFFF,t_70,g_se,x_16)
题解
好久不 dp 了,来一道快乐的 dp 保持手感。
经典的暴力递归 -> 傻缓存 -> dp,竟然有点手生…
class Solution {
public double largestSumOfAverages(int[] nums, int k) {
double[][] dp = new double[nums.length + 1][k + 1];
for (double[] d : dp) {
Arrays.fill(d, Integer.MIN_VALUE);
}
for (int j = 0; j <= k; j++) {
dp[nums.length][j] = -1;
}
for (int i = nums.length; i >= 0; i--) {
for (int p = 1; p <= k; p++) {
if (p == 1) {
double sum = 0;
for (int j = i; j < nums.length; j++) {
sum += nums[j];
}
dp[i][p] = sum / (nums.length - i);
}
double result = -1;
double preSum = 0;
for (int j = i + 1; j < nums.length; j++) {
preSum += nums[j - 1];
double avg = dp[j][p - 1];
if (avg != -1 && preSum / (j - i) + avg > result) result = preSum / (j - i) + avg;
}
if (result != -1) dp[i][p] = result;
}
}
return dp[0][k];
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/70124f38a66f4d8a956920660895dea9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5a-S5rOJSHE=,size_20,color_FFFFFF,t_70,g_se,x_16)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)