Você é um jovem nerd de programação que vive com seus outros 2 melhores amigos. Toda semana, um de vocês tem que fazer todas as tarefas da casa e decide quem é a vez de escolher um pedaço de pau. Quem escolhe o menor palito perde e faz todas as tarefas.
Como todos vocês são programadores e adoram criar quebra-cabeças, você modificou o "Escolha o menor bastão" em um quebra-cabeça de computador.
Aqui estão as regras do quebra-cabeça.
- Você receberá uma matriz 2D, onde cada coluna representa um bastão.
- Em cada coluna, 1 representa uma parte do manche e 0 é um espaço vazio
- Ao passar de cima para baixo em cada coluna, inicialmente você tem
0
e, assim que clicar em um1
, o stick é iniciado e o restante da coluna será preenchido1
apenas com - Você pode escrever seu programa para escolher uma coluna. O tamanho do stick nessa coluna determina o vencedor / perdedor. Tamanho do stick == número de 1s nessa coluna.
- No entanto, esse programa pode ter apenas uma complexidade linear no pior dos casos.
Como todos vocês são programadores, saberão se o programa de outra pessoa está gravando o limite de complexidade de tempo.
Seu trabalho é:
- Escreva um programa ou função que aceite entrada em formato 2D ou matriz de strings.
- A entrada pode ser obtida no STDIN / prompt / console ou em um argumento de função.
- Se você estiver lendo a entrada do STDIN / prompt, poderá presumir que a leitura da entrada e a conversão para uma matriz leva 0 tempo (mesmo que o código para fazê-lo precise estar presente na sua resposta)
- Determine a coluna com o bastão mais longo.
- A saída pode ser o valor de retorno da função ou para STDOUT / console / alerta.
- O programa / função deve ter complexidade linear de pior caso,
O(m+n)
ondem
é o número de linhas en
o número de colunas.
A entrada pode ser um dos seguintes formatos:
Matriz 2D:
[ [0, 0, 0, 0],
[1, 0, 0, 0],
[1, 1, 0, 1],
[1, 1, 1, 1] ]
Matriz de cordas:
[ "0000", "1000", "1101", "1111" ]
A entrada terá as seguintes propriedades:
- O tamanho da matriz é desconhecido, assuma um retângulo de qualquer tamanho
- Em qualquer coluna, de cima para baixo, se você vir 1, tudo abaixo será um
- Paus de colunas vazias (ou seja, comprimento 0) são permitidos.
Este é um código de golfe, portanto o código mais curto vence ! *
Por favor, explique seu código ou forneça a versão simples (para verificar a complexidade do tempo) junto com qual dos dois formatos de entrada você espera.
ATUALIZAÇÃO Complexidade de tempo linear aqui significa O (n + m) em que n é o tamanho da coluna e m é o tamanho da linha. (Para aqueles que não estavam claros)
ATUALIZAÇÃO 2 Isso definitivamente pode ser feito em tempo linear. E se você estiver postando uma resposta, fique à vontade para adiar a publicação da lógica / algoritmo por alguns dias para uma luta justa :)
ATUALIZAÇÃO 3 Vou analisar todas as respostas em algumas horas para validar a complexidade do tempo e o programa :)
1
na entrada é a última célula. é necessário ler toda a entrada. Mesmo que a biblioteca padrão de uma linguagem falsifique o acesso aleatório ao stdin, nos bastidores ela está armazenando buffer e, portanto, o tempo gasto é Omega (n * m).