110 / 205
LeetCode · MediumO'rta20 ball· ~20 daqiqa

Find Minimum in Rotated Sorted Array

Faraz qiling, dastlab o'sish tartibida joylashgan nums massivi oldindan ma'lum bo'lmagan biror indeks atrofida aylantirilgan (rotated). Masalan, [0,1,2,4,5,6,7] massivi aylantirilib [4,5,6,7,0,1,2] ko'rinishiga kelishi mumkin.

Sizga shunday aylantirilgan nums massivi berilgan (takrorlanuvchi elementlarsiz). Undagi eng kichik elementni O(log n) vaqt murakkabligida toping.

example.go
func solve(nums []int) int {
    // ...
}

Misollar

kod
Input: nums = [3,4,5,1,2]
Output: 1
Tushuntirish: Dastlabki massiv [1,2,3,4,5] bo'lib u 3 marta aylantirilgan.
kod
Input: nums = [4,5,6,7,0,1,2]
Output: 0
kod
Input: nums = [11,13,15,17]
Output: 11

Maslahatlar

  1. Massiv to'liq saralanmagan bo'lsa ham, uni ikki qismga bo'lish mumkin — har bir yarmi o'zi saralangan bo'ladi, shuning uchun o'zgartirilgan binary search qo'llash mumkinligini o'ylab ko'ring.
  2. lo va hi ko'rsatkichlaridan boshlab mid ni hisoblang: agar nums[mid] > nums[hi] bo'lsa, minimal element mid dan o'ngda (lo = mid+1), aks holda mid o'zi ham nomzod bo'lishi mumkin (hi = mid); lo va hi tenglashganda o'sha indeks minimal elementni ko'rsatadi.