算法学习--3 最大子数组和以及进阶问题
来源:互联网 发布:csgo枪械数据 编辑:程序博客网 时间:2024/05/04 23:40
一 子数组最大和
题目:求子数组最大和
3 -2 1 -6 3 2 -1 3
方式及原理
用cur记录累加和,累加和为负数的话就清零,否则一直加下去,同时每次用result于cur比较,记录cur出现过的最大值。例如上面的例子cur更新和result更新结果如下:
cur:
3 1 2 0 3 5 4 7
result
3 3 3 3 3 5 5 7
最后返回result即可。
原理解释:假设最大和子数组为T,那么他前缀肯定不为负(如果为负那么去掉它就可以找到比他大的了),如果前缀不为负当然希望它一直加下去。
二 子数组最大累计和进阶版一
题目 :求一个数组任意俩个不重叠的子数组的累加和的最大值
3 -2 1 -6 4 3 -2 3
L 3 3 3 3 4 7 7 8
R 8 8 8 8 8 4 3 3
方式及原理
是求出从左到右每个位置的左半部能取到的子数组的最大值,然后再求出从右到左每个位置右半部能取到的子数组的最大值,而这俩个不重叠的子数组肯定是以每一个位置为分割的,每个位置上述俩者和最大的即为所求的结果。
实际只要先用一个数组记录从右到左的子数组的最大值即可,从左到右的我们本来就要遍历一次,不需要多遍历一次。
三 子数组最大累计和进阶版二
题目:求未排序数组中累加和为给定值K的最长子数组系列问题(时间复杂度O(n))
2 3 1 1 1 1 1 3 2
方式及原理
设立left,right俩个指针,初始位置都在最左边的位置,然后计算俩个指针之间的数字的和tem_sum,如果tem_sum<=K,right指针++,如果tem_sum>K,left指针++,并且如果在tem_sum ==k时,计算left到right的长度并跟新到man_len保存即可。
原理是因为假设存在这么一个最长的和为定值k的子序列,我这么做肯定不会错过它,首先是right指针会逐渐到达这个存在了的子序列的右边,然后left也会慢慢过来,自己体会哈哈~
0 0
- 算法学习--3 最大子数组和以及进阶问题
- 算法学习笔记----最大子数组问题
- 算法----最大子数组和
- 【算法导论学习-007】最大子数组和问题(Maximum subarray problem)
- 算法导论学习:分治策略之最大子数组问题
- 【算法学习】最大子数组问题的分治法求解
- 《算法导论》学习笔记之最大子数组问题
- 算法学习(排序四)最大子数组问题
- 【算法导论学习笔记】最大子数组问题
- 经典算法——连续子数组最大和问题
- 最大子数组的和问题--线性算法
- 从最大子数组和问题详尽贪心算法策略
- 子数组最大和问题
- 子数组最大和问题
- 最大子数组和问题
- 子数组最大和问题
- 最大子数组和问题
- 【算法】子数组的最大累加和/子矩阵的最大累加和问题
- 装饰模式
- 25. Reverse Nodes in k-Group
- NSTimer 计时器 OC
- XZ_CSS层叠样式表
- 直播这么火你做过了么!?!移动端HTML5 video标签 以及支持PC端直播
- 算法学习--3 最大子数组和以及进阶问题
- redis远程登录
- C++-关键字new和delete
- C++基础知识(2)--构造一个类的一般顺序
- Leetcode 51. N-Queens && 52. N-Queens II(Hard)
- [16-11-18]从[DHU教师排课助手]聊一下C#使用Oledb和range Cells[row,col]操作Excel
- String类的有关方法
- 【Unity】Kinect屏幕显示环境背景及人体投影
- java 常用十种设计模式示例归纳 | 已打包请带走