• 最大联通子数组的和(一)


    本次实验任务:

    思路分析:

    将二维拆分为一维,先求得每一行的最大子数组的和,并且求得每一行最大子数组的起始元素和终止元素,与其他行的进行比较,检查是否联通,若联通,则将两行的子数组最大值和相加,找出不同行子数组最大值求和的最大值即为所求

    已实现的代码:

     1 #include<iostream>
     2 #include<ctime>
     3 int max_(int j, int *array, int &first, int &last);
     4 using namespace std;
     5 #define row 5//行数
     6 #define col 5//列数
     7 int main()
     8 {
     9     srand((int)time(NULL));//随机种子
    10     int i, j,a[100][100];
    11     int array[100];
    12     int max_row[100];
    13     int sum=0,max=0;
    14     int first_num=0, last_num=0;
    15     for (i = 0; i < row; i++)
    16     {
    17         for (j = 0; j < col; j++)
    18         {
    19             //从(-100)到100间的随机数给二维数组赋值
    20             a[i][j] = rand() %(100-(-100)+1)-100 ;
    21         }
    22     }
    23     cout << "数组为:"<<endl;
    24     //显示数组
    25     for (i = 0; i < row; i++)
    26     {
    27         for (j = 0; j < col; j++)
    28         {
    29             cout << a[i][j]<<" ";
    30         }
    31         cout << endl;
    32     }
    33     cout << endl;
    34     //------------------------------------------------------------
    35     //每一行赋予一个一维数组
    36     for (i = 0; i < row; i++)//每一行
    37     {
    38         for (j = 0; j < col; j++)//每一列
    39         { 
    40             array[j] = a[i][j];
    41         }
    42         max_row[i]=max_(j, array,first_num,last_num);//求每一行的子数组和的最大值
    43         cout << max_row[i] <<" "<< first_num<<" "<<last_num<<endl;
    44         
    45     }
    46     return 0;
    47 }
    48 //求一维数组子数组和的最大值
    49 int max_(int j,int *array,int &first,int &last)
    50 { 
    51     int sum = 0, max = 0;
    52     for (j = 0; j < col; j++)
    53     {
    54         sum = sum + array[j];
    55         if (sum > max)
    56         {
    57             max = sum;
    58         }
    59         if (sum < 0)
    60         {
    61             sum = 0;
    62         }
    63         if (max == 0)
    64         {
    65             sum = sum + array[j];
    66             if (sum > max)
    67             {
    68                 max = sum;
    69             }
    70         }
    71         
    72     }
    73     return max;
    74 }

    效果截图:

    体会:由于主要精力放到了四则运算安卓方面(也没有太多成果),导致本次任务时间有点紧张,思考不够,现在只实现了求每一行子数组和的最大值,遇到瓶颈:由于算法原因起始元素和终止元素的值得确定有点混乱,明天加油,今天脑袋有点乱了,先学会儿别的

  • 相关阅读:
    Algs4-1.3.44文本编辑器的缓冲区
    Algs4-1.3.42复制栈
    Algs4-1.3.41复制队列采用for方式实现
    Algs4-1.3.39环形缓冲区
    Algs4-1.3.40前移编码
    Algs4-1.3.38删除第k个元素-数组实现
    安全测试的一些漏洞和测试方法
    Java内存自动回收,为什么会有内存泄露?
    三款主流静态源代码安全检测工具比较
    Fortify源码安全检测工具
  • 原文地址:https://www.cnblogs.com/brucekun/p/5356994.html
Copyright © 2020-2023  润新知