zoukankan      html  css  js  c++  java
  • leetcode1031

     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 = curmax
    11                 
    12         return bigmax
    13 
    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+1
    28             A1 = A[0:lefttag]
    29             litlen1 = self.getMaxByCount(A1,minlen)
    30             righttag = i
    31             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就是最大和。

  • 相关阅读:
    Android打包key密码丢失找回
    Java 操作 elasticsearch 报错(1)
    Linux Hbase1.2.6 安装及使用(1)
    JAVA WEB 作用域之间的区别
    JSTL 与 EL
    HTML CSS 常用单词
    java
    CentOS 7 MySQL 5.7 主从设置
    VMware安装CentOS7后配置静态IP
    MySQL explain,type分析(转)
  • 原文地址:https://www.cnblogs.com/asenyang/p/10744720.html
Copyright © 2011-2022 走看看