• 最大连续子数组问题2-homework-02


    1) 一维数组最大连续子数组

      如第homework-01就是一维数组的最大子数组,而当其首位相接时,只需多考虑子数组穿过相接的那个数就行了!

    2)二维数组

      算法应该和第一次的相似,或者说是将二维转化为一维。

      直接采取上下界枚举,得出结果。

    部分代码如下

    int maxsumh(int a[][COL], int row, int col)
    {
        int i, j, start;
        int max, min, temp;
        int summax, summin, sumall;
        int sum[ROW][COL];
    
        temp = a[0][0];
        for (i = 0; i < row; i++)
            for (j = 0; j < col; j++)
                temp = MAX(a[i][j], temp);
    
        if (temp < 0)
            return temp;
    
        for (start = 0; start < row; start++) {
            for (j = 0; j < col; j++) {
                for (i = start; i < row; i++) {
                    if (i == start)
                        sum[i][j] = a[i][j];
                    else
                        sum[i][j] = a[i][j] + sum[i - 1][j];
                }
            }
            for (i = start; i < row; i++) {
                max = min = sum[i][0];
                for (j = 0; j < col; j++) {
                    max = MIN(sum[i][j], max);
                    min = MAX(sum[i][j], min);
                }
    
                sumall = summax = summin = 0;
                for (j = 0; j < col; j++) {
                    sumall += sum[i][j];
                    summax += sum[i][j];
                    summin += sum[i][j];
                    max = MAX(max, summax);
                    min = MIN(min, summin);
                    summax = MAX(summax, 0);
                    summin = MIN(summin, 0);
                }
                temp = MAX(temp, MAX(sumall - min, max));
            }
        }
        return temp;
    }

    代码时间复杂度为O(n^3),但空间复杂度就很大,导致数组大小限制比较严重,我开数组行,列很大时,容易造成运行堆栈溢出。不怎么会做优化,就没有做了。

    1、描述在这么多相似的需求面前, 你怎么维护你的设计 (父类/子类/基类, UML, 设计模式,  或者其它方法) 让整个程序的架构不至于崩溃的?

      我是每种要求单独设计一个方法函数,直接调用。

    2、你在这个作业中学到了什么?  有什么好的设计值得分享?  感想如何 (太容易 / 太难 / 太无趣)?

      个人感觉题目对我来说难度很大。

     

    Personal Software Process Stages

    时间百分比(%)

    实际花费的时间 (分钟)

    原来估计的时间 (分钟)

    Planning

    计划

         

    ·         Estimate

    ·         估计这个任务需要多少时间,把工作细化并大致排序

         

    Development

    开发

         

    ·         Analysis

    ·         需求分析 (包括学习新技术)

     6% 30  30

    ·         Design Spec

    ·         生成设计文档

     4%  20  20

    ·         Design Review

    ·         设计复审 (和同事审核设计文档)

     0  0  0

    ·         Coding Standard

    ·         代码规范 (制定合适的规范)

     2%  10  20

    ·         Design

    ·         具体设计

     24% 120  60

    ·         Coding

    ·         具体编码

     24%  120  60

    ·         Code Review

    ·         代码复审

     0  0  0

    ·         Test

    ·         测试(自我测试,修改代码,提交修改)

     40%  200  30

    Reporting

    总结报告

         
    • Test Report
    • 测试报告
           
    • Size Measurement
    • 计算工作量
    • Postmortem & Improvement Plan
    • 事后总结, 并提出改进
           
             
    Total 总计 100% 总用时    500 总估计的用时     220
  • 相关阅读:
    使用 Dockerfile 定制镜像
    UVA 10298 Power Strings 字符串的幂(KMP,最小循环节)
    UVA 11090 Going in Cycle!! 环平均权值(bellman-ford,spfa,二分)
    LeetCode Best Time to Buy and Sell Stock 买卖股票的最佳时机 (DP)
    LeetCode Number of Islands 岛的数量(DFS,BFS)
    LeetCode Triangle 三角形(最短路)
    LeetCode Swap Nodes in Pairs 交换结点对(单链表)
    LeetCode Find Minimum in Rotated Sorted Array 旋转序列找最小值(二分查找)
    HDU 5312 Sequence (规律题)
    LeetCode Letter Combinations of a Phone Number 电话号码组合
  • 原文地址:https://www.cnblogs.com/jun1022/p/3348209.html
Copyright © 2020-2023  润新知