【LeetCode】813. Largest Sum of Averages 解题报告(Python)

标签(空格分隔): LeetCode

作者: 负雪明烛
id: fuxuemingzhu
个人博客: http://fuxuemingzhu.cn/


题目地址:https://leetcode.com/problems/largest-sum-of-averages/description/

题目描述:

We partition a row of numbers A into at most K adjacent (non-empty) groups, then our score is the sum of the average of each group. What is the largest score we can achieve?

Note that our partition must use every number in A, and that scores are not necessarily integers.

Example:

Input:
A = [9,1,2,3,9]
K = 3
Output: 20
Explanation:
The best choice is to partition A into [9], [1, 2, 3], [9]. The answer is 9 + (1 + 2 + 3) / 3 + 9 = 20.
We could have also partitioned A into [9, 1], [2], [3, 9], for example.
That partition would lead to a score of 5 + 2 + 6 = 13, which is worse.

Note:

  1. 1 <= A.length <= 100.
  2. 1 <= A[i] <= 10000.
  3. 1 <= K <= A.length.
  4. Answers within 10^-6 of the correct answer will be accepted as correct.

题目大意

把一个数组分成K个区间,使得各个平均数的和最大化。

解题方法

典型的dp求解的题目。不过dfs方式去做速度还挺快。看到A的大小是100,那么时间复杂度应该在O(n^3)。

我们定义一个函数LSA,这个函数的含义是,把A这个数组的前n个元素分成k个组得到的最大平均数和。使用m_二维数组完成记忆化,使得搜索速度变快。用sum_保存前i项数组的和,使得可以快速求平均数。

所以递归的方式:

把A这个数组的前i个元素分成k个组得到的最大平均数和 = max(把A这个数组的前j个元素分成k-1个组得到的最大平均数和 + 数组A从j+1到i个元素的平均值)。

如果读不懂上面这句话,可以直观的理解成k个组的最大平均数和 是怎么组成的?它是由前k-1个组与后面一个组放在一起组成,所以求怎么划分的情况下,前部分和后部分的求平均数的和最大。

代码如下:

class Solution:
def largestSumOfAverages(self, A, K):
"""
:type A: List[int]
:type K: int
:rtype: float
"""
n = len(A)
m_ = [[0 for i in range(n + 1)] for j in range(K + 1)]
sum_ = [0] * (n + 1)
for i in range(1, n + 1):
sum_[i] = sum_[i - 1] + A[i - 1]
return self.LSA(A, sum_, m_, n, K) # Largest sum of averages for first n elements in A partioned into K groups
def LSA(self, A, sum_, m_, n, k):
if m_[k][n] > 0: return m_[k][n]
if k == 1: return sum_[n] / n
for i in range(k - 1, n):
m_[k][n] = max(m_[k][n], self.LSA(A, sum_, m_, i, k - 1) + (sum_[n] - sum_[i]) / (n - i))
return m_[k][n]

还可以用dp求解,待续。

参考资料:

https://www.youtube.com/watch?v=IPdShoUE9z8

日期

2018 年 9 月 14 日 ———— 脚踏实地,不要迷茫了

最新文章

  1. web.xml配置错误导致applicationContext.xml配置重复加载
  2. 对改善ABP的一些建议
  3. 阿里云安装LNMP以及更改网站文件和MySQL数据目录
  4. Centos6.X下安装php nginx mysql 环境
  5. 编写基于jQuery的插件的方法
  6. JS思维之路菜鸟也能有大能量(2)--模拟数组合并concat
  7. python数据结构-列表-建立/索引/反转
  8. 在IIS站点中Adomd.net集成认证账号问题
  9. 新增tab页无法获取到数据,原来是URL的rewrite配置文件忘了修改
  10. (原)java中opencv的width的问题
  11. 利用Apperance协议定义View的全局外观
  12. Android事件机制全然解析
  13. cmapx 保存绘制好的图层
  14. 洛谷 P1027 【Car的旅行路线】
  15. Hdoj 2041.超级楼梯 题解
  16. h5 右下角浮动按钮, 纯css实现
  17. 自己手写一个queuelink
  18. SQL Server 查询中文字段返回为空
  19. WinPE启动U盘的制作方法与软件下载(通用PE工具箱/老毛桃/大白菜WinPE)
  20. 分析公司shareaholic报告:Chrome浏览器使用量居首

热门文章

  1. kubernetes部署kube-controller-manager服务
  2. Beautiful Soup解析库的安装和使用
  3. CAN总线常见的两种编码格式(Intel/Motorola)
  4. Oracle中如何自定义类型
  5. AI ubantu 环境安装
  6. Linux:$?,$n,$#,$0
  7. matplotlib animation
  8. 莫烦python教程学习笔记——使用鸢尾花数据集
  9. 调整markdown 图片大小和对齐方式
  10. Redis慢查询配置和优化