如何在另一个数组

时间:2016-11-13 21:40:19

标签: python list python-3.x

我有一些不同值的2D数组,例如:

array = [[1, 1, 2, 5, 6, 1],
         [5, 1, 1, 1, 6, 7],
         [10, 12, 1, 1, 11, 11],
         [8, 10, 1, 1, 1, 9],
         6, 5, 10, 1, 15]]

并且,我想找到相同值的最大矩形数组的坐标(左上角和右下角)并打印出来。

在这个数组中是坐标:

x=1, y=2 
x=3, y=3  

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用此算法:

  • 从数组的每个x / y坐标开始。
  • 只要值不变,就向右走,向下走。
  • 检查每个步骤是否找到了具有相同值的新的最大字段。

这是脚本。请注意,我在数组的最后一行的末尾添加了1,以便所有条目具有相同的长度。变量[WinError 10061] No connection could be made because the target machine actively refused it x分别引用第一个和第二个数组索引,它们分别对应于行和列(不是列和行!)。

y

通过运行array =[[ 1, 1, 2, 5, 6, 1], [ 5, 1, 1, 1, 6, 7], [10, 12, 1, 1, 11, 11], [ 8, 10, 1, 1, 1, 9], [ 6, 5, 10, 1, 15, 1]] xMax = len(array) yMax = len(array[1]) maxSize = 0 for xUL in range(xMax): for yUL in range(yMax): valueRef = array[xUL][yUL] yBRMax = yMax for x in range(xUL, xMax): if (array[x][yUL] != valueRef): break for y in range(yUL, yBRMax): size = (y-yUL+1)*(x-xUL+1) if (array[x][y] != valueRef): yBRMax = y break else: size = (y-yUL+1)*(x-xUL+1) if (size > maxSize): print("New max size: xUL: %d yUL: %d x: %d y %d size: %d" %(xUL, yUL, x, y, size)) maxSize = size xMaxUL = xUL yMaxUL = yUL xMaxBR = x yMaxBR = y

生成以下输出
python3 max.py