Menu
CoddyTech

Search in Rotated Sorted Array

SedangBinary searchpython iconjava iconcpp iconc iconjs icon+10

Sebuah list berisi bilangan bulat berbeda diurutkan dari yang terkecil ke terbesar, lalu diputar: sejumlah elemen, mungkin nol, diambil dari bagian depan dan dipindahkan ke bagian belakang dengan urutan yang sama. Misalnya, [2, 5, 8, 11, 15, 19, 23] yang diputar sebanyak 4 menjadi [15, 19, 23, 2, 5, 8, 11]. Kamu mendapatkan list yang sudah diputar nums dan bilangan bulat target. Kembalikan indeks target di nums, dihitung dari 0, atau -1 jika tidak ada, dalam waktu O(log n).

Fungsi

search(nums: integer-array, target: integer) → integer
numsinteger-array
list bilangan bulat berbeda yang dirotasi lalu diurutkan
targetinteger
nilai yang dicari
Mengembalikaninteger
indeks target dalam nums, atau -1 jika tidak ditemukan

Batasan

  • 1 ≤ nums.length ≤ 5000
  • -104 ≤ nums[i], target ≤ 104
  • Semua nilai dalam nums berbeda.
  • nums adalah list menaik yang diputar sebanyak k, dengan 0 ≤ k < nums.length; k = 0 berarti list tidak diputar.

Contoh

Input
nums = [15, 19, 23, 2, 5, 8, 11]target = 5
Output
4
Penjelasan
Nilai tengah pertama, indeks 3, berisi 2, jadi bagian kanan [2, 5, 8, 11] sudah terurut dan berisi 5. Nilai tengah berikutnya, indeks 5, berisi 8; bagian kiri yang sudah terurut, [5, 8], berisi 5, sehingga mengarah ke indeks 4.
challenge icon

Pertanyaan lanjutan

Jika nums mungkin berisi duplikat, tidak ada algoritma yang dapat menjamin O(log n). Bisakah kamu membuktikannya dengan list berisi angka 1 yang dirotasi dan menyembunyikan satu angka 0?

Reset kode
def search(nums, target):
    # Tulis kodemu di sini

Tes #1

Tes #2

Tes #3

Argumen

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

Output yang diharapkan

4