这是问题所在:
"将使用2d整数数组来表示城市中每个区块的值。该值可能为负,表示该块是对其拥有的负债。完成一个方法,该方法查找由2d数组表示的城市中最有价值的连续子矩形的值。子矩形必须至少为1乘1.(如果所有值都为负值"最有价值的"矩形将是最接近0的负值。)
考虑以下示例。 2d数组的每行有6行和5列,代表城市的一个区域。其周围有正方形的单元格代表给定数组中最有价值的连续子矩形。 (值15。)"
我完全不知道如何解决这个问题。我认为我可以从每一个值开始,并使用它创建每个可能的子图,并更新变量以获得最高值。还有另一种方法可以做到这一点吗?我没有找到答案,我只需要一些指导。感谢
int most=-10000;
int current=0;
for(int i=0;i<city.length;i++){
for(int j=0;j<city.length;j++){
current+=city[i][j];
if(current>most){
most=current;
}
}
}
return most;
这是我迄今为止的尝试。希望你们能看到我在哪里。我从0,0开始检查整行并相应更新。
答案 0 :(得分:1)
算法是探索所有矩形形状,并扫描城市的形状。最大值在城市特定部分的特定形状中找到。
算法(假设城市是NxM):
Set MAX = Lowest value in the city
// ROW / COL represent the shape of the rectangle
for ROW = 1 to N
for COL = 1 to M
// scan the city for a shape the size of ROWxCOL
for POS_X = 0 to N-ROW
for POS_Y = 0 to M-COL
// You now have a top,left co-ordinate for the shape (POS_X,POS_Y)
// This represents the position in the city[][] array
SUM Values from co-ordinate POS_X,POS_Y to POS_X+ROW-1, POS_Y+COL-1
IF SUM>MAX; MAX=SUM
PRINT MAX