求二维数组最大子数组和(或矩阵的最大子矩阵和)

思路:先对所有的连续行进行组合,如包含第一行的子矩阵,如1, 12, 123, 1---m;包含第二行的子矩阵2, 23, 234, 2--m;同理其它

再将这些子矩阵对应的列上的元素相加,此时就可以使用一维上最大子数组求和的动态规划算法了。整体的时间复杂度为O(n^3)空间复杂度为O(n)


int findMaxSumOfMatrix(vector<vector<int> > &vvi){
	int m = vvi.size();

	if(0 == m) return 0;

	int n = vvi[0].size();
	int maxValue = vvi[0][0];

	for(int i = 0; i < m; i++){ //从第0行开始 
		vector<int> vi(n, 0);
		for(int j = i; j < m; j++){ //包含第i行的矩阵 0, 01, 012, 0123, 01...m - 1
			for(int k = 0; k < n; k++){ //包含第k列的矩阵  0, 01, 012, 0123, 01...n - 1
				vi[k] += vvi[j][k]; //vi[k]表示包含i行的矩阵的 各列之和即 v[0]即从vvi[0][0]-v[k][0]之和
			}
			
			/*一维数组中求最大连续子数组之和 动态规划的运用 */
			int curSum = vi[0];
			int allSum = vi[0];	
			for(int k = 1; k < n; k++){ //从vi[k]中选出最大的子矩阵和
				curSum = max(vi[k], curSum + vi[k]);
				allSum = max(allSum, curSum);
				maxValue = max(allSum, maxValue);
			}
		}
	}

	return maxValue;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用numpy中的索引方式来取值,例如arr[][1]表示取二维数组arr中第一行第二列的元素值。还可以使用切片方式来取出部分元素,例如arr[:2,1:3]表示取二维数组arr中第一行到第二行,第二列到第三列的元素值。此外,还可以使用numpy中的函数来对二维数组进行操作,例如np.sum(arr)表示对二维数组arr中所有元素和。 ### 回答2: numpy是Python中一个非常常用的数学计算库,可以用于进行各种数值运算、数值分析以及数据处理等工作。在numpy中,二维数组可以被看作是一个矩阵,我们可以使用多种方法来取值。 首先,我们可以使用索引来取值。对于一个二维数组arr,可以使用arr[i][j]的方式来获得矩阵中第i行第j列的元素值。其中i和j分别表示对应的行和列的索引值,索引值从0开始计数。 另外,numpy提供了更简便的语法来进行矩阵的取值操作。我们可以使用arr[i, j]的方式来获得矩阵中第i行第j列的元素值,其结果与arr[i][j]是等价的。 除了使用单个索引值来取值外,我们还可以使用切片的方式来获取矩阵的某个范围内的元素。对于一个二维数组arr,可以使用arr[start_row:end_row, start_col:end_col]的语法来获取从start_row行到end_row行(不包括end_row)以及从start_col列到end_col列(不包括end_col)之间的元素。 此外,numpy还提供了更多灵活的方法来根据条件取值,比如使用布尔型索引、使用where函数等等。 综上所述,numpy提供了多种方法来进行二维数组矩阵的取值操作,包括使用索引、使用切片、使用布尔型索引等等。这些方法可以帮助我们灵活、高效地获取矩阵中的元素值,方便进行后续的计算和分析工作。 ### 回答3: numpy库是Python中常用的数值计算库,其中的ndarray对象是实现数组矩阵操作的基础。在numpy中,我们可以使用一些方法来取得二维数组矩阵的值。 首先,可以通过索引的方式来取得特定位置的元素。索引从0开始,可以用[row, column]的形式来指定某个位置的元素。例如,arr[0, 0]表示取得二维数组矩阵arr中第一行第一列的元素值。 除了单个位置的索引,我们还可以使用切片(slice)的方式来获取二维数组矩阵。切片可以使用[start:end:step]的形式来指定取值的范围。其中,start表示起始位置,end表示结束位置,step表示步进值,默认为1。例如,arr[0:2, 1:3]表示取得二维数组矩阵arr中第一行至第二行、第二列至第三列的元素形成的矩阵。 此外,numpy还提供了一些函数来获取数组最大值、最小值、平均值、和值等统计结果。例如,可以使用arr.max()来取得二维数组矩阵arr中的最大值,使用arr.min()来取得最小值,使用arr.mean()来取得平均值。 总之,numpy库提供了丰富的方法来获取二维数组矩阵的值,包括索引、切片和统计函数等。这些方法使得我们可以方便地对数组进行操作和计算,提高了数值计算的效率和便捷性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值