Arrays 二维数组,使用指定值修剪

Arrays 二维数组,使用指定值修剪,arrays,algorithm,Arrays,Algorithm,使用指定值修剪二维数组的好方法是什么 A = [0 0 0 0 0] [1 2 3 0 0] [4 0 6 0 0] [0 0 0 0 0] B = trim(A, 0) // results in: // B = [1 2 3] // [4 0 6] 修剪操作应能够从四个侧面中的任何一个切割。伪代码: trim(array[WIDTH][HEIGHT], trimmed): // top left corner will be (xmin, ymi

使用指定值修剪二维数组的好方法是什么

A = [0 0 0 0 0]
    [1 2 3 0 0]
    [4 0 6 0 0]
    [0 0 0 0 0]

B = trim(A, 0)
// results in:
// B = [1 2 3]
//     [4 0 6]
修剪操作应能够从四个侧面中的任何一个切割。

伪代码:

trim(array[WIDTH][HEIGHT], trimmed):

    // top left corner will be (xmin, ymin)
    xmin = WIDTH
    ymin = HEIGHT

    // bottom right corner will be (xmax, ymax)
    xmax = -1
    ymax = -1

    for (y = 0; y < HEIGHT; y++):
        for (x = 0; x < WIDTH; x++):
            if (array[x][y] != trimmed):
                if (xmin > x) xmin = x
                if (xmax < x) xmax = x
                if (ymin > y) ymin = y
                if (ymax < y) ymax = y

    if (xmin == WIDTH)
        return an empty array
    else
        return sub-array with top left corner in (xmin, ymin) 
               and bottom right corner in (xmax, ymax)
修剪(数组[宽度][高度],修剪):
//左上角为(xmin,ymin)
xmin=宽度
ymin=高度
//右下角为(xmax,ymax)
xmax=-1
ymax=-1
对于(y=0;y<高度;y++)而言:
对于(x=0;xx)xmin=x
如果(xmaxy)ymin=y
如果(ymax
时间复杂度为
O(宽*高)
,空间复杂度为
O(1)


在一些编程语言(如C或C++)中,由于和,循环的
速度应该快得多。

这是一个很好的问题。没有那么大的努力/如果
A=[1 1;0 0;3 3]
,是否将
修剪(A,0)
删除中间一行?或者你的
trim
功能只是从周边开始向内修剪吗?我正在尝试。我使用的方法是检查整行和整列的值。row=0到N,row=N到0,col=0到M,col=M到0,以获取开始和结束的行和列,但这似乎很荒谬。我在寻求任何可能得到更好的东西的方法。修剪必须从外面开始。我甚至不知道如何从中得到一个结果B=trim(A,0)。