我试图找到总和最大的子数组左上角的索引。我见过找到最大子数组的算法,但是这些算法不适合我的需求,因为在使用算法之前,我需要设置子数组的尺寸。
/**
* Finds the rectangle of height h and width w within the band
* row0 <= row < row0 + h with the most "ink" in it, or the largest sum in it
* @param int[][] image - A 2d array of light intensity values of each pixel in an image
* @param h, w - Dimensions of the specified rectangle with height h and width w
* @param row0 - the index of where it should start constructing rectangles? (I'm not sure)
* @return The index of the leftmost column of the rectangle
*/
private int findHorzPosition(int[][] image, int row0, int h, int w) {
int maxSum = 0;
int maxRow = 0;
for(int p = row0; p <= image.length - 1; p++) {
int[][] tempArr = new int[image.length - row0][image[p].length - 1];
for(int q = 0; q <= image[p].length - 1; q++) {
tempArr[p][q] = image[p][q];
for(int i = 0; i <= tempArr.length - 1; i++) {
int rowSum = 0;
for(int j = 0; j <= tempArr[i].length - 1; j++) {
rowSum += image[i][j];
}
if (rowSum > maxSum) {
maxSum = rowSum;
maxRow = i;
}
}
}
}
return maxRow;
}
这就是我所拥有的,但是我似乎无法使它正常工作。我有什么建议吗?
答案 0 :(得分:0)
findHorzPosition
方法的javadoc说:
在带
h
的带中“墨水”最多或其中最大和的矩形w
中查找高度row0 <= row < row0 + h
和宽度h
的矩形
这意味着波段高row0
,即该方法应搜索p
行中顶行的矩形。
因此,代码应 不具有@return
1 循环。
javadoc也说:
maxRow
矩形最左列的索引
代码返回q
。对于矩形,代码应返回值i
1 ,而不是{{1} }表示总和最大的 row 。
1)变量名没有意义,因此代码难以遵循。具有单字符名称的局部变量仅应在含义明显的情况下使用,例如i
,j
,...表示索引,x
,y
,z
表示坐标。在您的代码中,p
,q
,i
和j
不是明显的名称。将q
重命名为left
,将i
重命名为row
,并将j
重命名为col
。