leetcode 813. Largest Sum of Averages | 813. 最大平均值和的分组(暴力递归->傻缓存->DP)

2023-05-16

题目

https://leetcode.com/problems/largest-sum-of-averages/
在这里插入图片描述

题解

好久不 dp 了,来一道快乐的 dp 保持手感。

经典的暴力递归 -> 傻缓存 -> dp,竟然有点手生…

class Solution {
    public double largestSumOfAverages(int[] nums, int k) {
        // Solution 1: 带缓存的暴力递归
        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;
        }
//        return process(nums, 0, k, dp);

        // Solution 2: 自底向上的dp
        for (int i = nums.length; i >= 0; i--) { // from index i
            for (int p = 1; p <= k; p++) { // p partition
                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];
    }

    // 当前位置是i,后面还有p段可以分的时候,返回最大的avg之和。
//    public double process(int[] nums, int i, int p, double[][] dp) {
//        if (dp[i][p] != Integer.MIN_VALUE) return dp[i][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);
//            return dp[i][p];
//        }
//
//        double result = -1;
//        double preSum = 0;
//        for (int j = i + 1; j < nums.length; j++) {
//            preSum += nums[j - 1];
//            double avg = process(nums, j, p - 1, dp);
//            if (avg != -1 && preSum / (j - i) + avg > result) result = preSum / (j - i) + avg;
//        }
//        dp[i][p] = result;
//        return dp[i][p];
//    }
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leetcode 813. Largest Sum of Averages | 813. 最大平均值和的分组(暴力递归->傻缓存->DP) 的相关文章

  • Latex部分斜体变直体

    Latex斜体变为直体 rm即可 未使用之前的效果 xff08 x n 43 1 61 mathop arg min limits x alpha x D n xff09 为了将所有的小写x变为直体 xff0c 将所有的x替换为 rm x
  • Latex打花体

    Latex提供了三种花体 xff0c 注意使用时候提前导入包 xff0c 否则会报错 usepackage amsthm amsmath amssymb usepackage mathrsfs 使用的时候直接掉包即可 下面演示部分效果 xf
  • 遗传算法代码

    全局搜索最优算法 xff08 1 xff09 遗传算法 这里以github上的遗传算法开源库为例子 xff1a 首先我们安装GA xff08 官方说依赖库好像只支持Python 3 xff0c 但是我好像python2也安装成功了 xff0
  • ubuntu安装KVM

    ubuntu安装KVM 现在官网下载ubuntu镜像 xff0c 桌面版或者服务端都可 xff0c 这里以桌面端为例 安装之前确保磁盘有足够大的空间 xff08 这很重要 xff09 安装KVM span class token funct
  • Error: GPG check FAILED

    Error GPG check FAILED 这由于源key错误导致的dnf或者yum xff08 软件包管理器 xff09 安装软件失败 解决的方法很简单 xff0c 有些傻逼博客在那边坑人 xff0c 写的一长串解决办法都不能用 xff
  • Ubuntu彻底卸载Python

    1 查看要卸载的Python版本 若要卸载python2 xff0c 则查看命令为 python2 version 若要卸载python3 xff0c 则查看命令为 python3 version 这里我卸载python3 6 2 卸载Py
  • Ubuntu Python链接指向python3

    1 安装python3 7 sudo apt get install python3 7 2 查看python目前的指向 ls l usr bin grep python 3 删除原有的python链接 sudo rm usr bin py
  • ubuntu安装pip3

    1 安装命令 sudo apt get install python3 pip 2 查看pip3的版本以及对应的python版本 pip3 V pip 21 1 1 from usr local lib python3 7 dist pac
  • latex打双引号“ “

    latex中如果用英文输入模式的双引号键入 xff0c 则输出的结果与我们预期的不符合 xff0c 这并不是LaTeX的正确输入方式 34 test 34 输出为 xff1a 正确的输入方式为 xff1a 引号左边输入两个反引号 96 xf
  • 过拟合的原因以及解决办法(深度学习)

    过拟合 xff1a 模型在训练集上表现的非常好 xff0c 但在测试集的数据下表现很差 具体观察loss函数就是 xff0c train loss一直降低 xff0c 而test loss先降低 xff0c 而后随着epoach的增加 xf
  • Linux与MAC共享以及TimeMachine服务器的搭建

    自从添置了MBPR之后 xff0c 就发现使用Samba协议的话 xff0c Linux与MacOS之间传输速度相当不稳定 xff0c 我还一度以为是MBP的无线网卡问题 随后便尝试了一下AFP协议 xff0c 果然效果立现 xff0c 因
  • Python字符串转数字

    默认转换方式 xff1a num 61 int string 把二进制 xff0c 八进制 xff0c 十六进制转化为数字 xff0c python也提供了内置函数 xff0c 非常方便 xff0c 用法分别如下 xff1a num1 61
  • Linux根据进程名字彻底删除所有相关的子进程

    Linux有些时候kill 9进程pid xff0c 进程名字还会出现 xff0c 比如spark提交应用时的SparkSubmit 这是因为当前进程有其它子进程依赖 此时可以根据进程名字彻底删除 xff0c 这里我提供了一份模板 xff1
  • Python中Json文件的写入与读取

    字典写入Json文件 xff0c 代码如下 xff1a import json sparkConfDict 61 39 defaultMaxSplitBytes 39 defaultMaxSplitBytes 39 openCostInBy
  • Python获取当前工作目录以及改变工作目录

    import os print os getcwd 获取并打印当前工作目录 os chdir 34 目标目录 34 修改当前工作目录为目标目录
  • Linux 手动杀VNC进程

    步骤 方法一 1 查VNC进程 span class token function ps span ef span class token operator span span class token function grep span
  • 记录我重新安装ORBSLAM2和PX4的过程

    1 背景 xff1a 今天卸载了Ubuntu16 04 xff0c 重新装了一个Ubuntu18 04 xff0c 成功做完系统之后需要把之前的备份恢复 我的备份比较粗暴 xff0c 就是直接把 home里的文件都先复制到Windows下
  • 【网络干货】最全BGP路由协议技术详解

    一 BGP 的基本概念 自治系统AS xff08 Autonomous System xff09 AS 是指在一个实体管辖下的拥有相同选路策略的 IP 网络 BGP 网络中的每个 AS 都被分配一个唯一的 AS 号 xff0c 用于区分不同
  • Python正则表达式之 - ?: / ?= / ?!

    用圆括号将所有选择项括起来 xff0c 相邻的选择项之间用 分隔 但用圆括号会有一个副作用 xff0c 使相关的匹配会被缓存 xff0c 此时可用 放在第一个选项前来消除这种副作用 其中 是非捕获元之一 xff0c 还有两个非捕获元是 61
  • Python教程:无参装饰器

    一 xff1a 储备知识 1 args xff0c kwargs span class token keyword def span span class token function index span span class token

随机推荐