Menu
CoddyTech

Search in Rotated Sorted Array

Uma lista de inteiros distintos foi ordenada em ordem crescente e, em seguida, rotacionada: algum número de elementos, possivelmente zero, foi retirado do início e movido para o final, na mesma ordem. Por exemplo, [2, 5, 8, 11, 15, 19, 23] rotacionada em 4 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 lá, em O(log n) tempo.

Função

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

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 deixa sem rotação.

Exemplos

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

Para ir além

Se nums puder conter duplicatas, nenhum algoritmo poderá garantir O(log n). Você consegue provar isso com uma lista rotacionada de 1s que esconde um único 0?

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

Teste #1

Teste #2

Teste #3

Argumentos

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

Saída Esperada

4