Menu
CoddyTech

Search in Rotated Sorted Array

Lista różnych liczb całkowitych została posortowana rosnąco, a następnie obrócona: pewną liczbę elementów, być może zero, przeniesiono z początku na koniec w tej samej kolejności. Na przykład [2, 5, 8, 11, 15, 19, 23] po obróceniu o 4 staje się [15, 19, 23, 2, 5, 8, 11]. Otrzymujesz obróconą listę nums i liczbę całkowitą target. Zwróć indeks target w nums, licząc od 0, lub -1, jeśli tej liczby tam nie ma, w czasie O(log n).

Funkcja

search(nums: integer-array, target: integer) → integer
numsinteger-array
obrócona, posortowana lista różnych liczb całkowitych
targetinteger
wartość, której należy szukać
Zwracainteger
indeks elementu target w nums lub -1, jeśli go brakuje

Ograniczenia

  • 1 ≤ nums.length ≤ 5000
  • -104 ≤ nums[i], target ≤ 104
  • Wszystkie wartości w nums są różne.
  • nums to rosnąca lista obrócona o pewne k, gdzie 0 ≤ k < nums.length; k = 0 oznacza, że pozostaje nieobrócona.

Przykłady

Wejście
nums = [15, 19, 23, 2, 5, 8, 11]target = 5
Wyjście
4
Wyjaśnienie
Pierwsza środkowa wartość, o indeksie 3, wynosi 2, więc prawa połowa [2, 5, 8, 11] jest posortowana i zawiera 5. Następna środkowa wartość, o indeksie 5, wynosi 8; posortowana lewa część [5, 8] zawiera 5, co prowadzi do indeksu 4.
challenge icon

Pytanie dodatkowe

Jeśli nums może zawierać duplikaty, żaden algorytm nie może zagwarantować O(log n). Czy potrafisz to udowodnić, używając obróconej listy jedynek, w której ukryto pojedyncze zero?

Zresetuj kod
def search(nums, target):
    # Wpisz kod tutaj

Test #1

Test #2

Test #3

Argumenty

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

Oczekiwany wynik

4