给定数组a[N](每个元素都是正整数)和一个整数k(k小于等于N/3),要求从数组a中找出不相交的三个数组,每个数组长度都为k,使得三个数组之和最大。输出(i,j,k)表示三个子数组的开始下标,如果有多个答案,返回最小的那个三元组。

分析:
这个问题是前缀和的“花式玩法”,也可以看做是动态规划。
定义数组s[N],s[i]表示sum(a[i-k+1]~a[i])
定义数组ss[N],ss[i]表示sum(a[i-k+1]~a[i])+max(s[0~(i-k)]),也就是i前面的两个片段最大和,且第二个片段以i结尾。
定义数组sss[N],sss[i]表示i前面的三个片段最大和,且第二个片段以i结尾。
这个问题时空复杂度都为O(N)。

这个问题还有一种简洁的解法,原因在于3的特殊性。
什么是“三”,三就是左边一片,右边一片,中间一片。
定义left数组,left[i]表示i左面最大的片段
定义right数组,right[i]表示i右面最大的片段
定义ans数组,ans[i]为中间一片、左边一片、右边一片之和,也就是ans[i]=s[i]+left[i-k]+right[i+1]

任何事物,如果要想找到它的简便方法,就必须应用上这个事物的特殊性。

class Solution:def maxSumOfThreeSubarrays(self, nums, k):""":type nums: List[int]:type k: int:rtype: List[int]"""# print(nums)#前缀和s = [0] * len(nums)s[0] = nums[0]for i in range(1, len(s)):s[i] = s[i - 1] + nums[i]# print('s', s) a = [0] * len(nums)a[k - 1] = s[k - 1]for i in range(k, len(s)):a[i] = s[i] - s[i - k]# print('a', a)#最大前缀和ss = [0] * len(nums)ma = 0for i in range(k - 1, len(s)):if a[i] > a[ma]:ma = iss[i] = (a[ma], ma)# print('ss',ss)sss = [0] * len(nums)for i in range(k * 2 - 1, len(s)):sss[i] = a[i] + ss[i - k][0]# print('sss',sss)#二级最大前缀和b = [0] * len(nums)ma = 0for i in range(k * 2 - 1, len(s)):if sss[i] > sss[ma]:ma = ib[i] = (sss[ma], ma)# print('b',b)#三级前缀和c = [0] * len(nums)for i in range(k * 3 - 1, len(s)):c[i] = a[i] + b[i - k][0]# print('c',c)ans = 0for i in range(k * 3 - 1, len(c)):if c[i] > c[ans]:ans = iret = [0, 0, ans]ret[1] = b[ret[2] - k][1]ret[0] = ss[ret[1] - k][1]ret = list(map(lambda i: i - k+1, ret))return retif __name__ == '__main__':ans = Solution().maxSumOfThreeSubarrays([1,2,1,2,6,7,5,1], 2)print(ans)

转载于:https://www.cnblogs.com/weiyinfu/p/7636061.html

leetcode689:Maximum Sum of 3 Non-Overlapping Subarrays相关推荐

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

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  2. URAL 1146 Maximum Sum(最大子矩阵的和 DP)

    Maximum Sum 大意:给你一个n*n的矩阵,求最大的子矩阵的和是多少. 思路:最開始我想的是预处理矩阵,遍历子矩阵的端点,发现复杂度是O(n^4).就不知道该怎么办了.问了一下,是压缩矩阵,转 ...

  3. NOIP前夕:noi.openjudge,Maximum sum

    Maximum sum 总Time Limit: 1000msMemory Limit: 65536kB Description Given a set of n integers: A={a1, a ...

  4. 简单英文题 16 Maximum Sum Not Exceeding K(python)

    http://noi.openjudge.cn/english/16/ """ 简单英文题 16 Maximum Sum Not Exceeding K(AC) http ...

  5. !!!---1588|Sum of All Odd Length Subarrays(新)

    1588. 所有奇数长度子数组的和 Given an array of positive integers arr(正整数), calculate(计算) the sum of all possibl ...

  6. D28:Maximum sum(最大和,翻译)

    原题:OpenJudge - 1481:Maximum sum 翻译: 描述:给定一组n个整数:A={a1,a2,...,an},我们定义函数d(A)如下: t1 t2 d(A) = max{ ∑ai ...

  7. 英语翻译 Maximum sum

    OpenJudge - 1481:Maximum sum 2022 2.10 Given a set of n integers: A={a1, a2,..., an}, we define a fu ...

  8. SPOJ KGSS Maximum Sum (线段树)

    SPOJ KGSS Maximum Sum 题意:求区间最大值与第二大值之和 思路:线段树维护两个最大值 /********************************************** ...

  9. 689 Maximum Sum of 3 Non-Overlapping Subarrays

    题目 思路:首先是长度为k的子数组的和.这个好计算.题目要求返回的是三个和最大的子数组的第一个数字的下标.下标要尽可能小.如果只要求这样,题目就很简单了.还有个要求是各个子数组不重叠.要想不重叠首先得 ...

最新文章

  1. python批量pdf转word,python批量实现Word文件转换为PDF文件
  2. activity中fragment 返回键不退出_分享一波阿里Android客户端面经,我竟连这都答不上来?...
  3. Sql Server 2005如何设置连接加密
  4. arcgis批量裁剪矢量模型
  5. vue抽屉_VUE组件 之 Drawer 抽屉
  6. python3迭代器和可迭代对象,Python3学习(8)--迭代,可迭代的和迭代器
  7. 这套GitHub 1300星的NLP课程即将完结,视频授课,在线答疑丨课程
  8. 小心了!一大波存储厂商术语正在靠近
  9. ORACLE 11.2.0.4 OCR VOTING DISK 模拟恢复场景
  10. 【剑指offer】面试题17、合并两个排序的链表
  11. 关于码云的一些基本知识_关于使用码云,GITHUB,阿里云CODE来管理代码的一些操作记录...
  12. 人工智能之产生式系统
  13. 小米游戏本bios_年轻人的第一台游戏本?——小米游戏本2019评测
  14. 链新:探索NFT中国化路径,与实体经济相结合
  15. Maven setting文件配置错误:Non-parseable settings..in comment after two dashes (--) next character must be
  16. 莫言领取诺贝尔文学奖演讲稿(中英文)----讲故事的人
  17. Spring Boot 实践折腾记(10):响应式编程支持库Reactor
  18. Set 中 toArray()
  19. 计算机选购配置项目活动,笔记本电脑选购活动计划.doc
  20. 软件测试 | 白盒的测试方法

热门文章

  1. h5 移动端 监听软键盘弹起、收起
  2. Spring Boot Questions- Part 1
  3. 纯CSS3实现打火机火焰动画
  4. js中的call和apply方法的区别
  5. 仿头条新闻app,实现下拉刷新,上拉加载分页
  6. 淘宝店的图片哪里来的
  7. 1、linux网络服务实验 用PuTTY连接Linux
  8. java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFSheet.getMergedRegion
  9. 数据结构之字符串反转
  10. B/S应用中的ActiveX数字签名相关问题杂谈