Olá, seja bem vindo a mais um Resolvendo problemas no HackerRank: No caso de hoje, iremos analisar as vagas de uma estrada e dar o resultado do número de vagas possíveis. Vejamos mais informações com a explicação e sua resolução.
Service Lane -
Um motorista está dirigindo na rodovia. A luz de verificação do motor de seu veículo está acesa e o motorista deseja obter o serviço imediatamente. Felizmente, uma faixa de serviço corre paralela à rodovia. Varia em largura ao longo do seu comprimento.
Você receberá uma matriz de larguras em pontos ao longo da estrada ( índices ) e, em seguida, uma lista dos índices de pontos de entrada e saída. Considerando cada par de pontos de entrada e saída, calcule o tamanho máximo do veículo que pode trafegar com segurança naquele segmento da faixa de serviço.
Exemplo
- n = 4
- largura= [2, 3, 2, 1]
- casos = [[1, 2], [2,4]]
Se o índice de entrada, i = 1 e a saída, j = 2, existem dois segmentos larguras de 2 e 3, respectivamente. O veículo mais largo que pode passar por ambos é 2. Se i = 2 e j = 4, as larguras são [3, 2, 1], o que limita a largura do veículo a 1.
Nosso objetivo: é a achar largura máxima do veículo que pode passar por cada segmento da faixa de serviço descrita
Confuso? Veja a tabela a seguir,acredito que com ela seja mais simples a compreensão:
8 5 n = 8, t = 5
2 3 1 2 3 2 3 3 width = [2, 3, 1, 2, 3, 2, 3, 3]
0 3 cases = [[0, 3], [4, 6], [6, 7], [3, 5], [0, 7]]
4 6
6 7
3 5
0 7
Saída:
1
2
3
2
1
Mas porquê esses resultados? Veja:
0: | |--| 2
1: | |---| 3
2: | |-| 1
3: | |--| 2
4: | |---| 3
5: | |--| 2
6: | |---| 3
7: | |---| 3
- (0,3): Do índice 0 a 3, temos as larguras 2, 3, 1 e 2. Nada maior que 1 pode passar por todos os segmentos.
- (4, 6): Do índice 4 ao 6, temos as larguras 3, 2 e 3. Nada mais largo que 2 pode passar por todos os
- segmentos.
- (6,7): 3, 33.
- (3, 5): 2, 3, 22
- (0,7): 2, 3, 1, 2, 3, 2, 3, 3 → 1.
Vejamos então uma forma de encontrar o resultado máximo que pode passar em cada uma das larguras, veja o algoritmo javaScript a seguir:
// Neste código,foi necessário fazer um alteração na linha let result = serviceLane(n, cases) e mudar para: let result = serviceLane(width, cases); e também alterar os parâmetros da função para os descritos a seguir:
function serviceLane(n, cases) {
// Write your code here
const arr = [];
for (let item of cases) {
arr.push(Math.min(...n.slice(item[0], item[1]+1)));
}
return arr;
}
O código cria uma const que terá um array vazio e cria um lanço de repetição onde dentro terá uma variável chamada item
e dentro do arr
vazio, ele lança o menor valor dentro dos dois index dentro de item, e logo após retornamos o arr
com o menor valor.
O resultado será:
1
2
3
2
1
Assim, concluímos mais um Resolvendo problemas no HackerRank: até a próxima.
Top comments (0)