LeetCode-813-最大平均值和的分组

news2025/1/18 7:36:19

在这里插入图片描述

1、动态规划法

我们可以利用数组 d p [ i ] [ j ] dp[i][j] dp[i][j]来表示我们将数组中区间 [ 0 , i − 1 ] [0,i-1] [0,i1]的元素分为 j j j组的平均值的总和。因此我们可以得到状态转化方程如下: { d p [ i ] [ j ] = ∑ r = 0 i − 1 n u m s [ r ] i , j = = 1 d p [ i ] [ j ] = m a x x ≥ j − 1 ( d p [ x ] [ j − 1 ] + ∑ r = x i − 1 n u m s [ r ] i − x ) , j > 1 \left\{\begin{matrix} dp[i][j]= \frac{\textstyle \sum_{r=0}^{i-1}nums[r]}{i} ,j==1 \\ dp[i][j]= \underset{x\ge j-1}{max} (dp[x][j-1]+\frac{\textstyle \sum_{r=x}^{i-1}nums[r]}{i-x}),j>1 \end{matrix}\right. dp[i][j]=ir=0i1nums[r],j==1dp[i][j]=xj1max(dp[x][j1]+ixr=xi1nums[r]),j>1
考虑到我们在状态转化方程中会经常使用到区间之和,因此我们可以使用前缀和数组来代替常用的数组。

class Solution {
public:
    double largestSumOfAverages(vector<int>& nums, int k) {
        int n = nums.size();
        vector<double> prefix(n + 1);
        for (int i = 0; i < n; i++) {
            prefix[i + 1] = prefix[i] + nums[i];
        }
        vector<vector<double>> dp(n + 1, vector<double>(k + 1));
        for (int i = 1; i <= n; i++) {
            dp[i][1] = prefix[i] / i;
        }
        for (int j = 2; j <= k; j++) {
            for (int i = j; i <= n; i++) {
                for (int x = j - 1; x < i; x++) {
                    dp[i][j] = max(dp[i][j], dp[x][j - 1] + (prefix[i] - prefix[x]) / (i - x));
                }
            }
        }
        return dp[n][k];
    }
};

2、动态规划法优化

由于我们在数组中每次只使用到上一轮的数组,因此我们可以只是用一个一维数组来代替二维数组。

class Solution {
public:
    double largestSumOfAverages(vector<int>& nums, int k) {
        int n = nums.size();
        vector<double> prefix(n + 1);
        for (int i = 0; i < n; i++) {
            prefix[i + 1] = prefix[i] + nums[i];
        }
        vector<double> dp(n + 1);
        for (int i = 1; i <= n; i++) {
            dp[i] = prefix[i] / i;
        }
        for (int j = 2; j <= k; j++) {
            for (int i = n; i >= j; i--) {
                for (int x = j - 1; x < i; x++) {
                    dp[i] = max(dp[i], dp[x] + (prefix[i] - prefix[x]) / (i - x));
                }
            }
        }
        return dp[n];
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/44523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机五大部件是指什么

计算机五大部件&#xff1a; 计算机硬件系统由运算器、控制器、存储器&#xff08;内外存储器&#xff09;、输入设备和输出设备五部分组成。 1、控制器&#xff1a;控制器就是一个系统中枢&#xff0c;控制计算机如何运行、运转的基本单元。 每一个运算器都需一个单独的控制…

D-016 JTAG硬件电路设计

JTAG硬件电路设计1 简介1.1 JTAG分类1.2 ARM调试器2 设计要点3 电路实战3.1 Xilinx3.2 ALTERA ------USB blaster1 简介 JTAG(Join Test Action Group)的中文名称为联合测试工作组&#xff0c;是一种国际标准测试协议&#xff0c;主要用于芯片内部测试&#xff1a;验证设计和P…

Ubuntu16.04 完整版 Gym 安装及说明

Ubuntu16.04 完整版 Gym 安装及说明1. 安装前言2. Gym 开发环境说明3. 完整版 Gym 的安装3.1 Anaconda 创建虚拟环境3.2 安装 gym[box2d]3.2.1 采用官方 GitHub 教程进行安装的报错及解决方案3.2.2 采用 Anaconda 进行安装3.2.3 测试能否成功运行 LunarLander-v2 环境3.3 安装 …

【一文秒懂——YAML配置文件】

目录 1. YAML配置文件 2. 实例 2.1 将原application.properties改为application.yml&#xff1a; 2.2 将原application-dev.properties改为application-dev.yml&#xff1a; 1. YAML配置文件 在Spring Boot项目中&#xff0c;还可以使用YAML配置文件&#xff0c;这是一种使…

一文搞懂漏洞严重程度分析

漏洞的级别定义主要从两个维度进行判断&#xff1b; 1、可利用性 2、影响性 可利用性指标 可利用性指标组刻画脆弱性组件&#xff08;即包含漏洞的事物&#xff09;的特征&#xff0c;反映漏洞利用的难易程度和技术要求等。可利用性指标组包含四个指标&#xff0c;分别是攻击…

最新阿里云GPU服务器租用配置费用价格表出炉(多配置报价)

阿里云GPU服务器优惠3折GPU云服务器vgn6i优惠价469.46元/月起&#xff0c;GPU云服务器gn6i和GPU云服务器gn6v均有活动&#xff0c;NVIDIA T4及V100均有活动&#xff0c;主机教程网 来详细说下阿里云GPU云服务器收费标准价格表&#xff0c;再来说说GPU云服务器计费模式&#xff…

Python学习笔记(十八)——Pandas进阶

文章主要内容文件操作&#xff1a; • 文件读取: read_csv(csv),read_table(表格),read_excl(excel) • 文件写入&#xff1a;to_csv, to_excel 数据清洗&#xff1a; • 处理缺失值&#xff1a;isnull(识别), dropna (过滤), fillna(填充) • 数据转换&#xff1a;drop_duplic…

MVCC多版本并发控制

目录 1、数据库并发场景 2、当前读和快照读 3、MVCC的隔离级别 4、实现原理 4.1、隐藏字段 ​​​​​​​4.2、Undo_log&#xff08;版本链&#xff09; 4.3、Read View&#xff08;读视图&#xff09; 4.4、RC、RR隔离级别下的快照读有什么区别 MVCC&#xff0c;多版…

文献认证!Kamiya艾美捷抗酒石酸酸性磷酸酶TRAP染色试剂盒

人类及动物体骨组织不断地进行着重建&#xff0c;骨重建过程包括骨的分解吸收与新骨的形成。破骨细胞&#xff08;Osteoclast&#xff0c;OC&#xff09;负责骨分解与吸收&#xff0c;而成骨细胞&#xff08;osteoblast&#xff0c;OB&#xff09;负责新骨形成。破骨细胞贴附在…

【WAX链游】发布一个免费开源的MiningNetwork合约脚本BTK

前言 挖矿网络&#xff08;Mining Network&#xff09;官网&#xff1a; https://miningnetwork.io 挖矿网络&#xff08;Mining Network&#xff09;合约脚本&#xff1a;https://github.com/encoderlee/MiningNetworkBot 回顾之前我们推出过的免费开源链游脚本&#xff1a…

【React技术】JSX在企业级项目的运用and一个元素渲染demo

JSX 它被称为JSX,是JavaScript的语法扩展。我们建议在React中使用JSX。JSX可以很好地描述UI应该呈现它应该具有的基本交互形式。JSX可能会让人想起模板语言,但它具有JavaScript的所有功能。 const element = <h1>Hello, world!</h1>;React认为渲染逻辑与其他UI…

红眼睛红外成像微型成像仪快速刷新与动态显示温度测量

默认参数下&#xff0c;设备的温度测量和数据输出频率为每秒 4Hz&#xff0c;这一输出速率基本可以保证所有计 算机和手机都能够正常显示实时画面&#xff0c;但导致的问题是实时画面有卡顿的感觉。数据的处理速度与 计算机和手机的配置高低有直接关系&#xff0c;下面仅以…

VScode 基础使用教程

VScode 的安装以及使用基础&#xff08;C配置&#xff09; 奉上VScode安装物资 VScode 的安装 进入VScode官网&#xff0c;点击 Download for windows 即可得到安装包&#xff0c;运行即可。 编译器G的配置 下载 MinGW&#xff0c;将其保存至任意磁盘中&#xff08;下面默认C…

在 Navicat 中执行数据库范围搜索

无论你选择的数据库是 MySQL、MariaDB、SQL Server、Oracle 和 PostgreSQL&#xff0c;还是基于云的服务&#xff0c;如 Amazon RDS、Amazon Aurora、Amazon Redshift、SQL Azure、Oracle Cloud 和 Google Cloud&#xff0c;你都将不可避免地要寻找一些你不知道位置的数据。在这…

简单3步轻松搭建个人博客

对于计算机专业的学生&#xff0c;课余时间最有价值的事莫过于写技术博客了。我们可以通过博客记录生活经历、学习过程、技术成长&#xff0c;同时博客还能树立个人品牌&#xff0c;结识更多兴趣相投的人。 从计算机技术角度而言&#xff0c;博客的搭建及维护会让你的技术不断…

猴子也能学会的jQuery——总结习题

&#x1f4da;系列文章—目录&#x1f525; 猴子也能学会的jQuery第一期——什么是jQuery 猴子也能学会的jQuery第二期——引用jQuery 猴子也能学会的jQuery第三期——使用jQuery 猴子也能学会的jQuery第四期——jQuery选择器大全 猴子也能学会的jQuery第五期——jQuery样式操作…

字符串压缩(三)之短字符串压缩

一、通用算法的短字符压缩 开门见山&#xff0c;我们使用一段比较短的文本&#xff1a;Narrator: It is raining today. So, Peppa and George cannot play outside.Peppa: Daddy, its stopped raining. 使用ZSTD与LZ4分别压缩一下上面这段短文本。下面分别是它们的压缩结果。…

良好基本面引领发展,中国春来将聚势而强?

2022年&#xff0c;是一个挑战与机遇共存的年份。 一方面&#xff0c;作为“双减”、《民促法实施条例》落地执行的第一年&#xff0c;转型难题困扰着广大K12教培企业。另一方面&#xff0c;职业教育、教育信息化利好政策频出&#xff0c;不少从业者藉此打开局面、柳暗花明。 …

[附源码]Python计算机毕业设计Djangospringboot作业管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

项目经理和产品经理正在用哪些管理工具?

项目管理包括定义项目目标&#xff0c;指定行程和安排任务&#xff0c;以达到特定的目标。在项目管理过程中&#xff0c;很多工具可以使项目管理更有效、更高效。&#xff08;项目管理资料文末&#xff09; 跟大家介绍一下项目经理常用的项目管理工具&#xff1a; 1、甘特图 …