博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode1031
阅读量:7079 次
发布时间:2019-06-28

本文共 1525 字,大约阅读时间需要 5 分钟。

1 class Solution(object): 2     def getMaxByCount(self,A,maxlen): 3         curmax = 0 4         curmax = sum(A[:maxlen]) 5         bigmax = curmax 6         n = len(A) 7         for i in range(maxlen,n): 8             curmax = curmax-A[i-maxlen]+A[i] 9             if curmax > bigmax:10                 bigmax = curmax11                 12         return bigmax13 14 15     def maxSumTwoNoOverlap(self, A: 'List[int]', L: int, M: int) -> int:16         minlen = min(L,M)17         maxlen = max(L,M)18         n = len(A)19         allmax = self.getMaxByCount(A,L+M)20 21         bigmax = sum(A[:maxlen])22         litmax = self.getMaxByCount(A[maxlen:],minlen)23         allmax = max(allmax,bigmax+litmax)24 25         for i in range(maxlen,n):26             bigmax = bigmax - A[i-maxlen] + A[i]27             lefttag = i-maxlen+128             A1 = A[0:lefttag]29             litlen1 = self.getMaxByCount(A1,minlen)30             righttag = i31             A2 = A[righttag+1:]32             litlen2 = self.getMaxByCount(A2,minlen)33             litmax = max(litlen1,litlen2)34             allmax = max(allmax,bigmax+litmax)35         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就是最大和。

转载于:https://www.cnblogs.com/asenyang/p/10744720.html

你可能感兴趣的文章
Java中如何设置表格处于不可编辑状态
查看>>
Java JTable视图窗口滚动并定位到某一行
查看>>
课堂练习
查看>>
HTML学习成果 制作一个空白简历
查看>>
使用mybatis自带工具,自动生成表对应domain、mapper.xml以及dao
查看>>
餐饮ERP相关问题FAQ
查看>>
基于 Vue.js 的移动端组件库mint-ui实现无限滚动加载更多
查看>>
Matrix Computations 1
查看>>
springboot上传代码到gitlab并发布上线操作
查看>>
FILE * fopen(const char * path,const char * mode);
查看>>
[Flask]sqlalchemy使用count()函数遇到的问题
查看>>
[python](Docker SDK)上传镜像到私有仓库(tls、身份认证)
查看>>
听说是阿里笔试题
查看>>
使用pm2管理nodejs应用
查看>>
MySQL基础之---mysqlimport工具和LOAD DATA命令导入文本文件
查看>>
php 读取文件头部两个字节 判断文件的实际类型
查看>>
异或交换真的比开一个tmp快吗?
查看>>
使用sea.js管理你项目js文件
查看>>
windows device driver 小结感想
查看>>
SQLServer获取临时表列名并判断指定列名是否存在
查看>>