看到这个题目,我首先想到就是暴力解决

求出所有的子数组的和,取出最大值即可

但其中是可以有优化的

如 子数组【3:6】可以用【3:5】+【6】来计算

即可以将前面的计算结果保留下来,减少后面的重复计算

我是用C++实现的

代码如下

 #include <iostream>

 /*
求出所有字串和,取最大值
其中sun为用来存放结果的数组
后面的字串和可由前面的字串和再加一个数得到
可以减少运算次数
*/
int maxSum0(int* a,int n){
int sum[][];
int max = ;
for(int i=; i<n; i++){
sum[][i] = a[i];
std::cout<<a[i]<<" ";
if(max < a[i])
max = a[i];
}
std::cout<<std::endl; for(int i=; i<n; i++){
for(int j=i;j<n;j++){
sum[i][j] = sum[i-][j-]+sum[][j];
std::cout<<sum[i][j]<<" ";
if(max < sum[i][j])
max = sum[i][j];
}
std::cout<<"\n";
}
return max;
} int main(){
int a[]={, -, , , -, , , -, -};
std::cout<<maxSum0(a,)<<std::endl;
return ;
}

测试结果

我把所有子数组和都打印出来了,结果是正确的

分析

我的算法时间复杂度应该是O(n^2),因为在做子数组求和运算过程中,每一个子数组求和都只需要做一次加法运算就可得到,子数组一共为n*(n+1)/2个

所以时间复杂度为O(n^2)

网上别人的好方法

这是我在http://blog.csdn.net/v_JULY_v/article/details/6444021上看到的

时间复杂度读仅为O(n)

 /*
我看着这代码总觉的写的太简单了、、、
可是测试结果都没错。。 每一次累加到小于零的子串和时就从新开始
*/
int maxSum1(int* a, int n){
int max=;
int b=;
for(int i=; i<n; i++)
{
if(b<)
b=a[i];
else
b+=a[i];
if(max<b)
max=b;
}
return max;
}

这方法很不错,我就转过来了。

homework-01 "最大子数组之和"的解决过程的更多相关文章

  1. homework-01 "最大子数组之和"的问题求解过程

    写在前面:我的算法能力很弱,并且也是第一次写博文,总之希望自己能在这次的课程中学到很多贴近实践的东西吧. 1.这次的程序是python写的,这也算是我第一次正正经经地拿python来写东西,结果上来说 ...

  2. homework-02 "最大子数组之和"的问题进阶

    代码编写 这次的作业瞬间难了好多,无论是问题本身的难度或者是单元测试这一原来没接触过的概念或者是命令行参数的处理这些琐碎的问题,都使得这次作业的完成说不上轻松. 最大子数组之和垂直水平相连的拓展问题解 ...

  3. 求一个二维整数数组最大子数组之和,时间复杂度为N^2

    本随笔只由于时间原因,我就只写写思想了 二维数组最大子数组之和,可以  引用  一维最大子数组之和 的思想一维最大子数组之和 的思想,在本博客上有,这里就不做多的介绍了 我们有一个最初的二维数组a[n ...

  4. [LeetCode] Maximum Size Subarray Sum Equals k 最大子数组之和为k

    Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If t ...

  5. 求一个整数数组最大子数组之和,时间复杂度为N

    #include<iostream.h> int main () { ]={-,-,-,-,-,-,-,-,-,-}; ],sum=; ;i<;i++) { ) { sum=b[i] ...

  6. [Swift]LeetCode325. 最大子数组之和为k $ Maximum Size Subarray Sum Equals k

    Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If t ...

  7. 最大子数组之和(N)

    int maxSum(int *array, int n) { ]; ; ; ; i < n; i++) { ) newsum += array[i]; else newsum = array[ ...

  8. [LeetCode] Maximum Product Subarray 求最大子数组乘积

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  9. [LeetCode] 152. Maximum Product Subarray 求最大子数组乘积

    Given an integer array nums, find the contiguous subarray within an array (containing at least one n ...

随机推荐

  1. myecplise tomcat jdk

    myeclipse是javaweb初学者或者工程师非常常用的软件.那么在MyEclipse中如何使用自己安装的JDK和tomcat呢.下面是JDK1.7+tomcat7.0+myeclipse10的j ...

  2. centos系统自动化安装研究

    https://rhinstaller.github.io/anaconda/intro.html https://github.com/rhinstaller/pykickstart/blob/ma ...

  3. 【MySQL】MySQL索引背后的之使用策略及优化【转】

    转自:http://database.ctocio.com.cn/353/11664853.shtml 另外很不错的对于索引及索引优化的文章: http://www.cnblogs.com/magia ...

  4. play framework 框架安装及myeclipse 导入项目

    下载 play framework 框架. 解压你你要解压的目录 E:\play-1.2.7 相对其他的WEB框架.play的配置是相当简单的.没有那么多配置文件的搞法.上手比较快,就是相关的资料比较 ...

  5. Highcharts 连续的堆积面积图

    说明:设置两个柱形图间距为0 Highcharts柱图,设置X轴各Column的间距 plotOption : {    column : {        // 设置每个柱自身的宽度        ...

  6. JS常用小技巧

    iframe子窗口调用父窗口方法 parent.functionName(); 二.iframe 父窗口和子窗口相互的调用方法 1.IE中使用方法: 父窗口调用子窗口:iframe_ID.iframe ...

  7. CICS中设置程序常驻内存

    CICS中设置程序常驻内存 Permanent=no 修改为Permanent=yse --------------------- 对CICS的参数进行调节,RD中

  8. Mysql 自定义随机字符串

    前几天在开发一个系统,需要用到随机字符串,但是mysql的库函数有没有直接提供,就简单的利用现有的函数东拼西凑出随机字符串来.下面简单的说下实现当时. 1.简单粗暴. select ..., subs ...

  9. s3c6410_u-boot-2010.03移植【续】

    本文接上一篇:http://www.cnblogs.com/tanghuimin0713/p/3965528.html 6.3)重新编译,烧写,运行 U-Boot - ::) for SMDK6410 ...

  10. 【项目相关】MVC中将WebUploader进行封装

    昨天初步将webuploader用在了项目中,但紧接着就发现了一个问题,每一个页面都需要写那么多初始化webUploader的代码,这样肯定是我不能接受的,于是花了半天时间对该控件进行了封装. 最后, ...