2D阵列中最有价值的情节?

时间:2016-02-02 03:20:15

标签: java arrays algorithm multidimensional-array

这是问题所在:

"将使用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开始检查整行并相应更新。

1 个答案:

答案 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