Menu
CoddyTech

Search in Rotated Sorted Array

MittelBinäre Suchepython iconjava iconcpp iconc iconjs icon+10

Eine Liste verschiedener Ganzzahlen wurde aufsteigend sortiert und anschließend rotiert: Eine beliebige Anzahl von Elementen, möglicherweise null, wurde vorne entnommen 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 das Element nicht enthalten ist, und zwar in O(log n) Zeit.

Funktion

search(nums: integer-array, target: integer) → integer
numsinteger-array
die rotierte sortierte Liste unterschiedlicher Ganzzahlen
targetinteger
der zu suchende Wert
Gibt zurückinteger
der Index von target in nums oder -1, falls es fehlt

Einschränkungen

  • 1 ≤ nums.length ≤ 5000
  • -104 ≤ nums[i], target ≤ 104
  • Alle Werte in nums sind verschieden.
  • nums ist eine aufsteigend sortierte Liste, die um k Stellen 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
Die erste Mitte, Index 3, enthält 2, also ist die rechte Hälfte [2, 5, 8, 11] sortiert und enthält 5. Die nächste Mitte, Index 5, enthält 8; der sortierte linke Teil [5, 8] enthält 5, was zu Index 4 führt.
challenge icon

Weiterführende Frage

Wenn nums Duplikate enthalten kann, kann kein Algorithmus O(log n) garantieren. Kannst du das anhand einer rotierten Liste aus 1ern beweisen, in der sich eine einzelne 0 versteckt?

Code zurücksetzen
def search(nums, target):
    # Schreibe hier den Code

Test #1

Test #2

Test #3

Argumente

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

Erwartete Ausgabe

4