编程之美-2.14-求数组的子数组之和的最大值
这个以前写过,见求数组的最长子数组之和的最大值
这里说一下后面扩展题目。
1. 简述
1) 如果数组首尾相连,即允许找到一组数字(A[i],···,A[n-1], A[0],···, A[j]),请使其和最大,怎么办?
2) 如果题目要求返回最大子数组的位置,算法应该如何改变?还能保持O(N)的复杂度么?
2. 思路
第一个问题,书上给出了解答,即分为首尾相连和首尾不连两种情况,对于首尾不连的情况,按照前面的思路就可以了,对于首尾相连的情况,那么必然包含A[N-1]与A[0],然后从A[0]向后找最大的一段(按照不连的方法),从A[N-1]向前找最大的一段(按照不连的方法),然后得到A[0]-A[j] 与 A[i]-A[N-1],如果j=<i,两段不重合,两端连起来就是解答;如果j>i,两段重合,那么整个数组就是解答。这里我要说一下,关于两段重合的情况,当重合的时候,为什么说整个数组就是解答呢?这个点上我有质疑,因为假设数组为1,2,3,4,-1,4,3,2,1,那么左边最大的一段是A[0]-A[N-1],右边最大的一段还是A[0]-A[N-1]那么按照书上的说法,此时重合,就是最大子数组为A[0]-A[N-1],实际上应该是去掉中间的-1的。
针对上面的问题最稳妥的方法应该是每次循环移位数组一次,然后按照首尾不连的方法求最大和,这N长度的数组,移位就是N种情况,每种情况O(N)的复杂度,一共是O(N^2)的复杂度。
第二个问题,应该很容易,每次更新开始位置和结束位置即可。
3. 参考
编程之美,2.14节,求数组的子数组之和的最大值
编程之美-2.14-求数组的子数组之和的最大值相关推荐
- 编程之美 2.14求数组的子数组之和的最大值
对于一个有N个元素的数组,a[0]~a[n-1],求子数组最大值. 如:数组A[] = [−2, 1, −3, 4, −1, 2, 1, −5, 4],则连续的子序列[4,−1,2,1]有最大的和6. ...
- 编程之美2.14 求数组的子数组之和的最大值
这是一个在面试中出现概率很高的一道题目,就拿我来说吧,面试了5家公司中,两家公司问了这道题目,可见,这道题目是非常经典的. 解题思想也不是很难,我熟悉的有:两种解题办法: ...
- Programe_Of_Beauty:2.14 求数组的子数组之和的最大值
问题:一个有N个整数元素的一维数组,那么求子数组和的最大值. 分析:首先我们明确问题,子数组是联系的,不用返回元素的位置,元素是整数,可能为正,负或0.我们来看看最经典的解法:a[0],a[1]-a[ ...
- 求数组的子数组之和的最大值
一个有N个整数元素的一维数组( A[0], A[1], ... , A[n-2], A[n-1]),子数组之和的最大值是什么?(要求子数组的元素是连续的) 例子:有数组( -2, 5, 3, -6, ...
- 算法-求数组的子数组之和的最大值
一个一维int数组,这个数组有很多子数组,那么子数组之和的最大值是什么呢? 思考 1.题目说的子数组是连续的: 2.题目只需要求和,并不需要返回子数组的具体位置: 3.数组的元素是整数,所以数组可能包 ...
- 求数组的子数组之和的最大值IV
在之前的基础上又安排了二维数组的,在课上一开始是理解错要求了,简单的以为用循环数组就能解决,但是却忽视了子数组是否能构成矩形,之后课下和同学们讨论,主要是多重遍历,但是我还是没搞明白怎么构成新的二维数 ...
- 编程之美-求数组的子数组之和的最大值方法整理
[试题描述] 方法一: 上面这个算法的时间复杂度为O(n^3),改进后如下: 此时算法的时间复杂度为O(n^2) 方法二:时间复杂度O(nlogn) 方法三:时间复杂度O(n) 改进一下,可以得到空间 ...
- 【C】课堂结对联系-求整数数组的子数组之和的最大值(党云龙、黄为)
测试题目 求整数数组的子数组之和的最大值. 题目分析 首先是明确题目的目的:求最大值:其次是考虑子数组求和.这里将求最大值写成一个单独的函数.主函数未测试函数.这里用到了二重循环,时间复杂度为N^2. ...
- 《团队开发一(求一个数组的连续的子数组之和的最大值)》
<团队开发一(求一个数组的连续的子数组之和的最大值)> (1)设计思想:一般的,求一个数组的最大子数组之和即是按数组顺序依次让前几个数的和与下一个数进行比较,设一变量来装每次比较后的较大的 ...
最新文章
- mysql删除原则_MySQL数据库的增删选查
- [MFC]设置文件夹目录时遇到的问题
- ubuntu18.04升级python_Ubuntu18.04一次性升级Python所有库的方法步骤
- node.js——麻将算法(三)胡牌相关明牌
- 自定义注解--Annotation
- select2赋值需要注意
- java 最少使用(lru)置换算法_[内附完整源码和文档] 基于C#的可视化虚拟存储器管理(LUR算法)...
- opengl计算帧率_unity如何计算帧率FPS
- 007---多态与多态性
- 通过隐藏Nginx和PHP版本号防止黑客攻击
- [转]请不要和陌生女人说话
- 修改远程桌面服务器里的密码
- 基于bert的阅读理解脚本(run_squad)原理梳理(从举例的角度说明)
- 母亲节第二期|有哪些母亲节祝福贺卡的素材灵感来源?
- Asp中显示%百分比函数FormatPercent的使用
- mysql联合主键意义_mysql设置联合主键的意义
- css3-pie,CSS3PIE
- struts2学习1
- 2021年N1叉车司机免费试题及N1叉车司机考试总结
- .fasta文件的相关处理
热门文章
- centos7 安装 mysql5.7
- 前端学PHP之文件操作
- VMware View 5.2 安装实施七 安装Web Client
- myeclipse的buildpath 和lib引入的区别
- 用Python进行SQLite数据库操作
- Android面试题目整理与讲解
- Android ViewPager多页面滑动切换以及动画效果---换view
- ACM输入输出--多组测试用例--C、C++、Java
- 依赖倒置(DIP),控制反转(IoC)与依赖注入(DI)
- golang常见字符串操作函数