class Solution(object):
def getMaxByCount(self,A,maxlen):
curmax = 0
curmax = sum(A[:maxlen])
bigmax = curmax
n = len(A)
for i in range(maxlen,n):
curmax = curmax-A[i-maxlen]+A[i]
if curmax > bigmax:
bigmax = curmax return bigmax def maxSumTwoNoOverlap(self, A: 'List[int]', L: int, M: int) -> int:
minlen = min(L,M)
maxlen = max(L,M)
n = len(A)
allmax = self.getMaxByCount(A,L+M) bigmax = sum(A[:maxlen])
litmax = self.getMaxByCount(A[maxlen:],minlen)
allmax = max(allmax,bigmax+litmax) for i in range(maxlen,n):
bigmax = bigmax - A[i-maxlen] + A[i]
lefttag = i-maxlen+1
A1 = A[0:lefttag]
litlen1 = self.getMaxByCount(A1,minlen)
righttag = i
A2 = A[righttag+1:]
litlen2 = self.getMaxByCount(A2,minlen)
litmax = max(litlen1,litlen2)
allmax = max(allmax,bigmax+litmax)
return allmax

getMaxByCount()方法是在A中选择连续maxlen长度的最大和。

先求L+M个连续区间的最大值,作为最基本的选择,记为allmax。

再进行一次遍历(从maxlen~n),每次选择maxlen个(L和M中更大的那个数)长度的区间,计算这个区间的和,记为bigmax。

然后将原数组一分为二,分别计算剩下的两个子集连续minlen个(L和M中更小的那个数)长度的区间的和,分别记为litlen1,litlen2。

litlen1和litlen2的更大的和,作为minlen长度的最大和,记为litmax。

每次循环内部,将allmax与bigmax+litmax进行比较,allmax中保留更大的值。

循环完毕,allmax就是最大和。

leetcode1031的更多相关文章

  1. [Swift]LeetCode1031. 两个非重叠子数组的最大和 | Maximum Sum of Two Non-Overlapping Subarrays

    Given an array A of non-negative integers, return the maximum sum of elements in two non-overlapping ...

随机推荐

  1. Layer For Mobile 弹窗 input输入文字后,点击取消确定按钮失效(需点击两次)

    webapp中使用Layer For Mobile弹出弹窗,修改昵称输入文字后,ios手机中,如果不先点击收起键盘,两个按钮点击之后无效... 两个按钮的方法是写在这里的——> 最后只能吧点击按 ...

  2. Linux修改日期、时间,系统与硬件时间

    Linux的时间分为两种,硬件时间和系统时间两种: 一.查看与修改系统时间 查看系统时间:date # date Fri Nov 26 15:20:18 CST 1999 用指定的格式显示系统时间:  ...

  3. python自学第13天 hashlib,re模块

    import hashlib sha=hashlib.sha3_512()#定义加密成什么格式 sha.update('how to use sha1 in 年后 '.encode('utf-8')) ...

  4. «面向对象程序设计(java)»第三周学习总结 周强 201771010141

    实验目的与要求 (1)进一步掌握Eclipse集成开发环境下java程序开发基本步骤: (2)熟悉PTA平台线上测试环境: (3)掌握Java语言构造基本程序语法知识(ch1-ch3): (4)利用已 ...

  5. centos7.5 安装mysql8.0.13

    在Linux系统上使用rpm包管理器安装mysql Installing MySQL on Linux Using RPM Packages 环境:CentOS Linux release 7.4.1 ...

  6. 认识:人工智能AI 机器学习 ML 深度学习DL

    人工智能 人工智能(Artificial Intelligence),英文缩写为AI.它是研究.开发用于模拟.延伸和扩展人的智能的理论.方法.技术及应用系统的一门新的技术科学. 人工智能是对人的意识. ...

  7. oc语言的Foundation框架(学习笔记1)

    Foundation框架 1.Foundation框架介绍 框架是由许多类.方法.函数以及文档按照一定的规则组合的起来的集合. cocoa程序编写主要用到2个框架Foundation和Applicat ...

  8. SQL Analytic Functions 分析函数

    应用场景 主要使用在需要分组计算的场景中,根据所需的计算值可以分为两类: 1,排序类:如排序号,相邻记录等 2,聚合类:如平均值,累加求和,最大值,最末值等 语法 分析函数的语法在各大数据库中基本类似 ...

  9. 同时开始了SQL。。。

    SQL LIMIT OFFSET 和 LIMIT code1: SELECT id, name, score FROM table ORDER BY score DESC LIMIT OFFSET 4 ...

  10. python: ImportError:DLL load failed 解决方法。

    在学习使用wordcloud 库创建词云过程中,mooc里提到可以使用另一个库函数,来创建不同形状的词云. 就是这句: ... from scipy.misc import imread mk = i ...