假设我们有一个二维数组最大的二维数组的列使用分而治之
1 2 3 1
5 6 4 0
0 3 2 1
1 2 1 0
有一个全球性的方式如何使用鸿沟找到列中的最大数目,如果攻克技术的长度每行都不一样?
我指的是寻找需要这一步骤的二维数组内峰的一个步骤。
一维数组它会是这样的
int maxNumber(vector<int> a , int min , int max){
if(min == max)
return a[min];
int mid = (min + max)/2;
int i = maxNumber(a , min , mid);
int j = maxNumber(a , mid +1, max);
if(i > j)
return i;
return j;
}
vector<int> v = { 1 , 2 , 5 , 0 , 10 , 9};
cout << maxNumber(a , 0 , a.size() -1);
现在对于N×N的N×M个或矩阵,我们可以做
int maxNumberCollum(vector<vector<int>> a , int row_min , int row_max , int size){
if (row_min == row_max){
return a[row_min][size];
}
int row = (row_min + row_max)/2;
int i = maxNumberCollum(a , row_min , row , size);
int j = maxNumberCollum(a , row + 1 , row_max , size);
if(i > j)
return i;
return j;
};
vector< vector<int> > a = { { 1 , 2 , 3 },
{ 5 , 0 , 1 },
{ 6 , 2 , 0 }
};
cout << maxNumberCollum(a , 0 , a.size() -1 , 2)
与列,我们希望作为参数传递给找到最大。
但是,如果我们不知道矩阵(2d数组)是NxN/NxM还是行的长度对于每一行都不相同,那么如何将它实现为2d数组将如何实现?
对每个列执行1d的情况,然后对每个列的结果再次执行1d的情况? – David
是D&C必须用来解决你的问题吗? – shole
@shole这不是必须的,但我试图找出它使用D&C – Darlyn