Algoritmo - Polícia e ladrão na grade (N * N)
Declaração do problema:
Dada a matriz N * N e cada célula da matriz contém polícia ou ladrão. Descubra o número de ladrões presos pela polícia.
Entrada:
3 1 -> aqui 3 é N e 1 é K
T P T
T T P
P P T
Resultado:
3
Minha solução expirou para algumas entradas:
1. Iterate each row and have two Treeset<Integer> to store position of police and thief
2. If current item is Police, then check if thief Treeset is Not empty,
a.if so then iterate the treeset to find the position from thief set which
can be removed(satisfying above criteria), remove thief from treeset and
increment counter.
a.1. If such item not available then add current position to police set
b. if not then add position to police treeset
3. If current item is Thief, then do the same
Após a iteração concluir por uma linha, itere para a próxima linha e, finalmente, no contador de impressão.
Tomando a complexidade do tempo para uma linha:
1. Iterando todos os elementos em uma linha O (n)
2. Adicionando ou removendo elemento do conjunto de árvores O (log (n))
Definitivamente leva mais do que O (n * log (n))
Por favor, deixe-me saber que tipo de problema é esse e como devo resolver de forma eficaz.