Menu
CoddyTech

Search in Rotated Sorted Array

Uma lista de inteiros distintos foi ordenada em ordem crescente e depois rotacionada: uma quantidade de elementos, possivelmente zero, foi retirada do início e movida para o final na mesma ordem. Por exemplo, [2, 5, 8, 11, 15, 19, 23] rotacionada em 4 posições se torna [15, 19, 23, 2, 5, 8, 11]. Você recebe a lista rotacionada nums e um inteiro target. Retorne o índice de target em nums, contando a partir de 0, ou -1 se ele não estiver na lista, em tempo O(log n).

Função

search(nums: integer-array, target: integer) → integer
numsinteger-array
a lista ordenada e rotacionada de números inteiros distintos
targetinteger
o valor a ser procurado
Retornainteger
o índice de target em nums, ou -1 se estiver ausente

Restrições

  • 1 ≤ nums.length ≤ 5000
  • -104 ≤ nums[i], target ≤ 104
  • Todos os valores em nums são distintos.
  • nums é uma lista crescente rotacionada por algum k com 0 ≤ k < nums.length; k = 0 a mantém sem rotação.

Exemplos

Entrada
nums = [15, 19, 23, 2, 5, 8, 11]target = 5
Saída
4
Explicação
5 está no índice 4. O primeiro elemento do meio, índice 3, contém 2, então a metade direita [2, 5, 8, 11] é a parte ordenada, e 5 está entre 2 e 11. O próximo elemento do meio, índice 5, contém 8; a parte esquerda ordenada [5, 8] contém 5, o que leva ao índice 4.

lock icon+23 testes ocultos ao enviar

challenge icon

Para ir além

Se nums puder conter duplicatas, nenhum algoritmo poderá garantir O(log n). Você consegue provar isso? Crie uma lista rotacionada de 1s com um único 0 escondido nela, em que qualquer busca por 0 precise ler todos os elementos.

Redefinir código
def search(nums, target):
    # Escreva o código aqui
Casos de teste

Caso 1

Caso 2

Caso 3

Entrada

nums = [15, 19, 23, 2, 5, 8, 11]
target = 5

Esperado

4