news 2026/4/18 13:32:32

leetcode 813. Largest Sum of Averages 最大平均值和的分组-耗时91%

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
leetcode 813. Largest Sum of Averages 最大平均值和的分组-耗时91%

Problem: 813. Largest Sum of Averages 最大平均值和的分组

解题过程

使用了动态规划的,耗时91%,若只使用回溯情况太多肯定会超时而且不好控制回溯的步长,所以考虑使用动态规划,存在两个变量,一个是K,另一个是数组长度n,所以动态规划的数组使用dp[k+1][n+1],vector<vector> dp(k+1, vector(n+1, 0.0));

首先计算数组的前缀和prefixSum,当k=1时,不论数组多长,都是取平均值,dp[1][j] = prefixSum[j] / (double)j;,然后双重循环,i是k的取值,j是数组长度,若i>=j也就是数组长度更短,此时每个数字单独做一组,累加也就是前缀和,if(j <= i) dp[i][j] = prefixSum[j];

若i<j,数组更长的,此时考虑将数组分成两部分,前一部分划分k-1次,最后一部分单独做1次,共k次,前一部分的最大值是dp[i-1][w],后一部分则是平均值(prefixSum[j] - prefixSum[w]) / (double)(j - w);,两者相加即可,最后拿到最大值就行

double mx = INT_MIN, tmp; for(int w = i - 1; w < j; w++) { tmp = dp[i-1][w] + (prefixSum[j] - prefixSum[w]) / (double)(j - w); if(mx < tmp) { mx = tmp; } } dp[i][j] = mx;

Code

class Solution { public: double largestSumOfAverages(vector<int>& nums, int k) { vector<int> prefixSum={0}; int s = 0; for(int& i : nums) { s += i; prefixSum.push_back(s); } int n = nums.size(); vector<vector<double>> dp(k+1, vector<double>(n+1, 0.0)); for(int j = 1; j <= n; j++) { dp[1][j] = prefixSum[j] / (double)j; } for(int i = 2; i <= k; i++) { for(int j = 1; j <= n; j++) { if(j <= i) { dp[i][j] = prefixSum[j]; } else { double mx = INT_MIN, tmp; for(int w = i - 1; w < j; w++) { tmp = dp[i-1][w] + (prefixSum[j] - prefixSum[w]) / (double)(j - w); if(mx < tmp) { mx = tmp; } } dp[i][j] = mx; } } } return dp[k][n]; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 18:04:20

快速掌握前端数据加密:Crypto-JS实战完全指南

快速掌握前端数据加密&#xff1a;Crypto-JS实战完全指南 【免费下载链接】crypto-js 项目地址: https://gitcode.com/gh_mirrors/cry/crypto-js 在当今数字化时代&#xff0c;前端数据安全已成为每个开发者必须重视的核心议题。Crypto-JS作为JavaScript加密标准库&…

作者头像 李华
网站建设 2026/4/17 16:34:04

如何在4种主流TTS架构中做出明智选择?

如何在4种主流TTS架构中做出明智选择&#xff1f; 【免费下载链接】TTS :robot: :speech_balloon: Deep learning for Text to Speech (Discussion forum: https://discourse.mozilla.org/c/tts) 项目地址: https://gitcode.com/gh_mirrors/tts/TTS 当面对Tacotron、Tac…

作者头像 李华
网站建设 2026/4/18 8:38:31

广告拦截检测绕过技术实现指南

广告拦截检测绕过技术实现指南 【免费下载链接】anti-adblock-killer Anti-Adblock Killer helps you keep your Ad-Blocker active, when you visit a website and it asks you to disable. 项目地址: https://gitcode.com/gh_mirrors/an/anti-adblock-killer Anti-Adb…

作者头像 李华
网站建设 2026/4/18 7:42:49

如何快速掌握Bcrypt.NET:终极密码安全指南

如何快速掌握Bcrypt.NET&#xff1a;终极密码安全指南 【免费下载链接】bcrypt.net BCrypt.Net - Bringing updates to the original bcrypt package 项目地址: https://gitcode.com/gh_mirrors/bc/bcrypt.net 在当今数字化时代&#xff0c;密码安全已成为每个开发者和系…

作者头像 李华
网站建设 2026/4/18 7:41:57

PyAutoGUI 终极指南:零基础玩转Python自动化神器

PyAutoGUI 终极指南&#xff1a;零基础玩转Python自动化神器 【免费下载链接】pyautogui asweigart/pyautogui: 是一个用于自动化图形用户界面操作的 Python 库。适合在 Python 应用程序中实现自动化操作&#xff0c;例如自动点击、拖动、输入文字等。特点是提供了简单的 API&a…

作者头像 李华
网站建设 2026/4/18 6:52:26

Dockerode实战:Node.js中构建企业级容器编排系统

Dockerode实战&#xff1a;Node.js中构建企业级容器编排系统 【免费下载链接】dockerode Docker Node Dockerode (Node.js module for Dockers Remote API) 项目地址: https://gitcode.com/gh_mirrors/do/dockerode 在现代云原生应用开发中&#xff0c;容器编排已成为…

作者头像 李华