zoukankan      html  css  js  c++  java
  • 查找二维数组list[][]中的最大的子数组的和

    之前做过最大一维数组子数组的和的题目,现在将数组扩展成二维:

    代码如下:

    #include<iostream>
    #define null -858993460
    using namespace std;
    
    
    void main()
    {
        int arr[]={8,9,10,-1,20,-30,4};
        int arr2[]={-9,-1,-4,-123};
        int arr3[]={0};
        int arr4[]={7,9,8};
        int arr5[3];
        int a[][100]={{5,6,-3,8,-9,2},{1,-12,20,0,-3,-5},{-9,-7,-3,6,7,-1}};
        int b[2][100];
        int c[3][100]={{-1,-2,-3},{-4,-5,-6},{-7,-8,-9}};
    
    
        int yiwei_maxsub_list(int list[],int length);
        int erwei_maxsub_list(int list[][100],int x,int y);
    
        cout<<"一维数组:"<<endl;
        cout<<yiwei_maxsub_list(arr,7)<<endl;
        cout<<yiwei_maxsub_list(arr2,4)<<endl;
        cout<<yiwei_maxsub_list(arr3,1)<<endl;
        cout<<yiwei_maxsub_list(arr4,3)<<endl;
        cout<<yiwei_maxsub_list(arr5,0)<<endl;
    
    
    
        cout<<"二维数组:"<<endl;
        cout<<erwei_maxsub_list(a,3,6)<<endl;
        cout<<erwei_maxsub_list(b,0,0)<<endl;
        cout<<erwei_maxsub_list(c,3,3)<<endl;
        
    
        
    }
    
    
    int yiwei_maxsub_list(int list[],int length)
    {
        int a[100]={0};
        int max;
        int i,j;
        int k=0;
    
        if(list==NULL||length==0)
        {
            cout<<"error!inter is null!";
            return 0;
        }
        
        
        for(i=0;i<length;i++)
        {
            a[k]=list[i];
            for(j=i;j<length;j++)
            {
                a[k+1]=a[k]+list[j+1];
                k++;
            }
        }
        max=a[0];
        for(i=0;i<k;i++)
        {
            if(max<a[i])
            {
                max=a[i];
            }
            
        }
        return max;
    }
    
    int erwei_maxsub_list(int list[][100],int x,int y)
    {//int list[][100]={{5,6,-3,8,-9,2},{1,-12,20,0,-3,-5},{-9,-7,-3,6,7,-1}};x=3,y=6
        int a[100][100]={0};
        int b[100][100]={0};
        int max,i,j,n;
        int t,k;//t行扩展后的,k列扩展
        if(list==NULL||x==0||y==0)//异常处理
        {
            cout<<"error!inter is null!";
            return 0;
        }
    
        for(n=0;n<x;n++)//n层(x)
        {
            k=0;
            for(i=0;i<y;i++)
            {
                a[n][k]=list[n][i];
                for(j=i;j<y;j++)
                {
                    a[n][k+1]=a[n][k]+list[n][j+1];
                    k++;
                }
            }
        }
        t=k;
        for(n=0;n<t;n++)//n列(t)
        {
            k=0;
            for(i=0;i<x;i++)
            {
                b[k][n]=a[i][n];
                for(j=i;j<x;j++)
                {
                    b[k+1][n]=b[k][n]+a[j+1][n];
                    k++;
                    
                }
            }
        }
    
        max=list[0][0];
    
        for(i=0;i<k;i++)
        {
            for(j=0;j<t;j++)
                if(max<b[i][j])
                {
                    max=b[i][j];
                }
        }    
        return max;
    
    
    
    }
    View Code

    截图:

    时间:用时,在一维数组的前提下1小时;

    方法:将二维数组参数传入函数后,函数将数组先进行行扩展,每行记录单独一行的子数组,然后列扩展,将原来的二维数组扩展为子数组和的数组,然后遍历扩展后的数组找到最大值;这样时间复杂度是(m+n)².

    总结:这其实体现了敏捷开发中的问题,用户的需求不断改变,团队的效率建立在过去的基础上,迭代开发的效率会比较高。这也是现在软件开发的主流,需要团队合作,代码规范,程序结构完整,健壮性强等等。再今后的软件工程学习和运用中深入体会。

  • 相关阅读:
    Adding Swap Files
    Creating a Swap Partition
    linux删除或隐藏命令历史记录history
    Unix系统解压tar包时出现@LongLink错误
    【白话经典算法系列之十七】 数组中只出现一次的数 其他三次
    MapReduce原理及其主要实现平台分析
    二叉搜索树转换为有序双向链表
    实现O(1)获取最大最小值的栈----java
    对线性回归,logistic回归和一般回归的认识
    SMO优化算法(Sequential minimal optimization)
  • 原文地址:https://www.cnblogs.com/zhaotian/p/3612240.html
Copyright © 2011-2022 走看看