псевдокод:
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)
Время сложность O(WIDTH * HEIGHT)
, пространство сложность O(1)
.
В некоторых языках программирования (например, C или C++) цикл for
должен быть намного быстрее из-за locality of reference и vectorization.
Большой вопрос. Не так много усилий. :/ –
Если 'A = [1 1 1; 0 0 0; 3 3 3] ', будет' trim (A, 0) 'удалить средний ряд? Или ваша функция 'trim' только обрезается внутрь, начиная с периметра? – Synergist
Я сейчас пытаюсь. Метод, который я использую, - это проверить целые строки и столбцы для значения. строка = от 0 до N, строка = от N до 0, col = от 0 до M, col = от M до 0, для получения начальных и конечных строк и столбцов, но это просто кажется смешным. Я прошу, чтобы какой-то способ получить что-то лучше. – Distraction