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

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

但其中是可以有优化的

如 子数组【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. android ios 只能輸入數字 不能輸入小數點的 函數 cordova

    andriod function numericsonly(ob) { var invalidChars = /[^0-9]/gi if (invalidChars.test(ob.value)) { ...

  2. Dynamics AX 4.0 多表looup

    project rar:http://files.cnblogs.com/files/sxypeace/PrivateProject_MutilTableLookupOnCtronl.rar 在AX ...

  3. 【MySQL】SQL语句嵌套1

    mysql中You can't specify target table <tbl> for update in FROM clause错误的意思是说,不能先select出同一表中的某些值 ...

  4. Magento后台界面全局样式修改之——font-weight

    路径: \app\design\adminhtml\Magento\backend\web\app\setup\styles\less\lib\_variables.less

  5. JavaScript编程规范

    最近看NodeJS中,有一部分写JS约定俗成的编程规范(附录B,详情参考附件),感觉在实际工作中能用到, 大致意思分享给大家,详情参考附件: 1.缩进:建议两空格 作为Node.js代码的缩进标记: ...

  6. IIS报错 未将对象引用设置到对象的实例。

    在vs中运行正常的项目 ,发布到IIS总是提示 未将对象引用设置到对象的实例. 运行静态页面 html正常,只是打开.aspx页面的时候报错,在确保了数据库,配置,权限均正常的情况下. 错误原因:先安 ...

  7. 对C语言中va_list,va_start,va_arg和va_end的一点理解

    这几个函数和变量是针对可变参数函数的,什么是可变参数函数呢,最经典的莫过于printf和scanf,这两个函数的声明如下: int printf(const char *format, ...); i ...

  8. Ubuntu下fcitx安装。(ibus不会用)

    1 安装命令: sudo apt-get install fcitx-table-wbpy 2 然后将语言支持中的键盘输入方式系统选项,选为fcitx. 3 注销系统后即可使用.

  9. redmine添加自定义属性

    使用redmine创建问题的时候,可能会发现没有我们需要的属性,这时候我们可以添加自定义的属性. 以添加满意度属性为例: 1.进入redmine管理界面,选择自定义属性 2.选择问题下面的新建自定义属 ...

  10. 解决Access连接 accdb 不可识别的数据库格式异常

    在Access07之前的数据库后缀名均为*.mdb 而连接字符串写成Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\myFolder\*.mdb ;Pe ...