• 第三次软件工程作业——最大连续子数组和(最大子段和)


    1.题目要求

        给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n    例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。   -- 引用自《百度百科》
    

    2.代码的编写

    这个代码的时间复杂度有点高,但是我目前还没想到别的方法,如我想到了其他的方法就贴在下面。
    coding点这里

    3.程序流程图

    4.利用eclipse中的Junit对代码进行测试

    根据上面的程序流程图来选择两组数据,从而来测试程序的正确性。
    这三组数据分别是{7 -1 -2 -3 -2 -5 -1 -2} ,{7 -2 11 -4 13 -5 -5 -2}和{6 -1 -2 -3 1 2 3}
    其代码:

    然后对测试结果分析

    5.总结

    希望下次能把作业做的更好一点吧,毕竟我感觉我和很多同学还差蛮多的。引用单老师的一句话就是“杀人偿命,欠债还钱” 。

    今天研究了一会儿,想到了一个时间复杂度低的方法。

    今天我参考了一下杭电上别人写的代码点这里
    我的代码:

    上一个代码的时间复杂度为O(n2)而这个代码的时间复杂度为O(n);
    来测试一下看看这个代码是否正确(测试代码就不需要重新写啦,只要把调用的函数改一下)
    然后看看测试结果:

  • 相关阅读:
    WINDOWS REDIS 修改requirepass 不生效;
    解读JavaScript原型链
    禁止浏览器自动填写用户名密码
    Vue购物车实例
    scrollTop的兼容性
    jQuery架构(源码)分析
    web前端优化整理(转)
    前端模块化:RequireJS(转)
    前端构建之gulp与常用插件(转载)
    PS快捷键
  • 原文地址:https://www.cnblogs.com/jmlkk/p/8669239.html
Copyright © 2020-2023  润新知