109 / 205
LeetCode · MediumO'rta20 ball· ~25 daqiqa

Find first and last position

O'sish tartibida saralangan nums massivi berilgan. target sonining birinchi va oxirgi marta qatnashgan indekslarini massiv ko'rinishida [first, last] qaytaring. Topilmasa [-1, -1] qayting. Algoritm O(log n) murakkablikda ishlashi zarur.

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

Misollar

kod
Input: nums = [5,7,7,8,8,10], target = 8
Output: [3, 4]
kod
Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1, -1]
kod
Input: nums = [], target = 0
Output: [-1, -1]

Maslahatlar

  1. Massiv saralangan bo'lgani uchun oddiy binary search kifoya qilmaydi — target ning birinchi va oxirgi o'rnini topish uchun ikkita alohida binary search yurgizish kerakligini o'ylab ko'ring.
  2. Bittasi target dan kichik bo'lgan eng chap chegarani (lower bound), ikkinchisi target dan katta bo'lgan eng chap chegarani (upper bound) topadigan ikkita binary search yozing; birinchisi natijaning boshlanish indeksini, ikkinchisidan 1 ayirilgani esa tugash indeksini beradi — agar boshlanish indeksidagi qiymat target ga teng bo'lmasa, [-1,-1] qaytaring.