bootloader

Зарегистрирован с 27.12.2019
Комментарии
27 декабря 2019

Что-то вы перемудрили с реализацией. Это обычный обход по графу. Вот вам нерекурсивный алгоритм - хоть на 0 записей, хоть на 10 миллиардов.

func Find_max_number_of_connected_colors_in_grid(grid [][]int) int {

var result int

rl := len(grid)
if rl == 0 { return 0 }
cl := len(grid[0])
if cl == 0 { return 0 }

s := Stack{}
visited := make(map[[2]int] bool)

dr := []int {-1, 1, 0, 0,}
dc := []int { 0, 0, 1,-1,}

for r:=0; r < rl; r++ {
    for c := 0; c < cl; c++ {
        if visited[[2]int{r, c}] { continue }

        ncc := 0
        v := grid[r][c]

        s.Push(r, c)
        visited[[2]int{r, c}] = true

        for !s.IsEmpty() {

            for i := 0; i < 4; i++ {
                rn := r + dr[i]
                cn := c + dc[i]

                if rn < 0 || cn < 0 { continue }
                if rn >= rl || cn >= cl { continue }
                if grid[rn][cn] != v { continue }
                if visited[[2]int{rn, cn}] { continue }

                s.Push(rn, cn)
                visited[[2]int{rn, cn}] = true
            }

            r, c = s.Pop()
            ncc++
        }

        if result < ncc {
            result = ncc
        }
    }
}

return result

}

А вообще все эти задачки ни к чему не ведут ? За 20 минут вы даже не напечатаете код и даже сам гугл признает, что это не идеальная система. Ну можно задавать кучу вопросов, а сколько у нас цветов, а не выйдем ли мы за границы стека - а есть у нас все бля запускается на кристале, что нам нужно экономить пямять или процессорное время? А если такого цвета нет? А как нам рассматривать цвета красный или светло красный ? А что если алгоритм пишет дальтоник ?

Ну а так да - получил удовольствие от решения. Вот gist если кому-то нужно: https://gist.github.com/P-A-R-U-S/ac59ec4a6d1dbf1a664487297f3dca4b

Ответить