联通子数组

Posted 四季信风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了联通子数组相关的知识,希望对你有一定的参考价值。

本次实验任务:

思路分析:

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

已实现的代码:

 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 }

效果截图:

 

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

以上是关于联通子数组的主要内容,如果未能解决你的问题,请参考以下文章

最大联通子数组的和

二维数组最大联通子数组和

返回二维数组最大联通子数组的和

求最大联通子数组的和(结对开发)

数组问题求二维整型数组最大联通子数组的和

返回一个二维整数数组中最大联通子数组的和