• 求二维数组的最大子数组


    郑云飞--韩亚华 

    还接的前几天的求一位数组的子数组,我们看懂了同学各种各样的思路。比如李帅-张硕组的方法就很简答易懂

    如下:

    int max(int list[],int length)
     2 {
     3     int sum ;
     4     int i,j;
     5     int max = list[0];
     6     for(i = 0; i<length; i++)
     7     {
     8         sum=0;
     9         for(j = i;j<length; j++)
    10         {
    11             sum=sum+list[j];
    12             if(sum>max)
    13             {
    14                 max = sum;
    15             }
    16         }
    17     }
    18     return max;

    还有网上找的算法:

     for(int i = 0;i < 12;i++)  
       {  
          if(sum >= 0)//如果加上某个元素,sum>=0的话,就加  
          {  
             sum += a[i];  
          }  
          else        //如果加上某个元素,sum<0了,就不加,从当前位置开始  
          {  
             sum = a[i];  
          }  
          if(sum > max)max = sum;  
       }  
       return max;

    于是我们想能否用以上两种解决这个问题,思路是将二维数组的列或行的子数组的和看成一个新的一维数组的元素。

    这样我们就能用到上面的方法实现。这样我们就能简化一部分计算。不过后来我发现有同学和我的像很想,并且他

    非常巧妙的实现了(见链接),所以我不再赘述。

    http://www.cnblogs.com/sulindong/p/3607523.html

     于是我们开始思考别的思路,就如同一维数组的最大子数组是以非负数开头和非负数结尾的,二位子数组的外围行

    和列的和肯定也是非负数。如果我们能遍历具有这样特征的字数组,在很多时候就能化简一部分枚举。但这样会使算

    法的实现很麻烦,所以我们暂时没采用。所以我们还没有很好的算法。。。。

  • 相关阅读:
    arm gdbserver armlinuxgdb
    建立非模态对话框与在线程中建立非模态对话框
    AutoLock C++
    Uboot bootcmd 和bootargs
    SetRegistryKey
    飞凌OK6410 uboot支持网络
    uboot 源码修改 bootcmd,IP ,BOOTARGS等参数
    TextBox(richTextBox) 光标和滚动条到文本末尾
    Windbg中使用查找内存并设置访问断点
    opencv EXAMPLES 编译 VS2010 (C++)
  • 原文地址:https://www.cnblogs.com/hanyahua/p/3612213.html
Copyright © 2020-2023  润新知