Menu
CoddyTech

Search in Rotated Sorted Array

MittelBinäre Suchepython iconjava iconcpp iconc iconjs icon+10

Eine Liste unterschiedlicher Ganzzahlen wurde aufsteigend sortiert und anschließend rotiert: Eine beliebige Anzahl von Elementen, möglicherweise null, wurde vom Anfang genommen und in derselben Reihenfolge ans Ende verschoben. Zum Beispiel wird [2, 5, 8, 11, 15, 19, 23], um 4 rotiert, zu [15, 19, 23, 2, 5, 8, 11]. Du erhältst die rotierte Liste nums und eine Ganzzahl target. Gib den Index von target in nums zurück, wobei ab 0 gezählt wird, oder -1, falls sie nicht enthalten ist, und zwar in O(log n)-Zeit.

Funktion

search(nums: integer-array, target: integer) → integer
numsinteger-array
die gedrehte sortierte Liste unterschiedlicher Ganzzahlen
targetinteger
der gesuchte Wert
Gibt zurückinteger
der Index von target in nums oder -1, falls es nicht vorhanden ist

Einschränkungen

  • 1 ≤ nums.length ≤ 5000
  • -104 ≤ nums[i], target ≤ 104
  • Alle Werte in nums sind verschieden.
  • nums ist eine aufsteigende Liste, die um ein bestimmtes k rotiert wurde, wobei 0 ≤ k < nums.length gilt; k = 0 lässt sie unrotiert.

Beispiele

Eingabe
nums = [15, 19, 23, 2, 5, 8, 11]target = 5
Ausgabe
4
Erklärung
5 befindet sich an Index 4. Das erste mittlere Element, Index 3, enthält 2, daher ist die rechte Hälfte [2, 5, 8, 11] sortiert, und 5 liegt zwischen 2 und 11. Das nächste mittlere Element, Index 5, enthält 8; der sortierte linke Teil [5, 8] enthält 5, was zu Index 4 führt.

lock icon+23 versteckte Tests beim Einreichen

challenge icon

Weiterführende Frage

Wenn nums Duplikate enthalten kann, kann kein Algorithmus O(log n) garantieren. Kannst du das beweisen? Erstelle eine gedrehte Liste aus 1ern, in der eine einzelne 0 versteckt ist und bei der jede Suche nach 0 jedes Element lesen muss.

Code zurücksetzen
def search(nums, target):
    # Schreibe hier deinen Code
Testfälle

Fall 1

Fall 2

Fall 3

Eingabe

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

Erwartet

4