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

Find Peak Element

Cho'qqi (peak) element deb o'zining o'ng va chap qo'shnilaridan qat'iy katta bo'lgan elementga aytiladi.

Sizga butun sonlardan iborat nums massivi berilgan. Uning ichidan ixtiyoriy bir cho'qqi elementning indeksini toping va qaytaring. Massivda bir nechta cho'qqilar bo'lishi mumkin, bunday holda ulardan ixtiyoriy birining indeksini qaytarish kifoya.

Massiv chegaralaridan tashqaridagi elementlar $-\infty$ ga teng deb faraz qilishingiz mumkin (ya'ni nums[-1] = nums[n] = -\infty).

Yechimingiz albatta O(log n) vaqt murakkabligida ishlashi kerak.

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

Misollar

kod
Input: nums = [1,2,3,1]
Output: 2
Tushuntirish: 3 cho'qqi element hisoblanadi va uning indeksi 2.
kod
Input: nums = [1,2,1,3,5,6,4]
Output: 5
kod
Input: nums = [1]
Output: 0

Maslahatlar

  1. Chiziqli qidiruv shart emas — qo'shni ikki elementni solishtirib, qaysi tomonda albatta cho'qqi borligini aniqlash mumkin, bu esa binary search g'oyasiga olib keladi.
  2. mid va mid+1 ni solishtiring: agar nums[mid] < nums[mid+1] bo'lsa, o'sish davom etmoqda va cho'qqi mid dan o'ngda joylashgan (lo = mid+1), aks holda cho'qqi mid da yoki undan chapda bo'ladi (hi = mid); lo va hi tenglashganda o'sha indeks cho'qqi hisoblanadi.