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, zachowując ich kolejność. Na przykład [2, 5, 8, 11, 15, 19, 23] obrócona o 4 pozycje daje [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 go 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 albo -1, jeśli go nie ma

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 pewną wartość k, gdzie 0 ≤ k < nums.length; k = 0 oznacza, że lista nie została obrócona.

Przykłady

Wejście
nums = [15, 19, 23, 2, 5, 8, 11]target = 5
Wyjście
4
Wyjaśnienie
5 znajduje się pod indeksem 4. Pierwszy środkowy element, indeks 3, zawiera 2, więc prawa połowa [2, 5, 8, 11] jest posortowana, a 5 znajduje się między 2 a 11. Następny środkowy element, indeks 5, zawiera 8; posortowana lewa część [5, 8] zawiera 5, co prowadzi do indeksu 4.

lock icon+23 ukrytych testów przy wysłaniu

challenge icon

Pytanie dodatkowe

Jeśli nums może zawierać duplikaty, żaden algorytm nie może zagwarantować O(log n). Czy potrafisz to udowodnić? Utwórz obróconą listę jedynek z ukrytym w niej pojedynczym zerem, tak aby każde wyszukiwanie zera wymagało odczytania każdego elementu.

Zresetuj kod
def search(nums, target):
    # Napisz kod tutaj
Przypadki testowe

Przypadek 1

Przypadek 2

Przypadek 3

Wejście

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

Oczekiwane

4