140 / 205
LeetCode · MediumO'rta20 ball· ~30 daqiqa

Queue Reconstruction by Height

Sizga people massivi berilgan, bunda people[i] = [hi, ki] degani i-chi shaxsning balandligi hi va uning oldida kamida ki ta baland bo'lgan (yoki teng) shaxs turishi lozimligini bildiradi.

Navbatni qayta tartibla va natijani qaytaring.

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

Misollar

kod
Input: people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
Output: [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
kod
Input: people = [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]]
Output: [[4, 0], [5, 0], [2, 2], [3, 2], [1, 4], [6, 0]]

Maslahatlar

  1. Balandligi kattaroq odamlarni avval joylashtirsangiz, ular pastroq bo'ylagilarning "oldida kamida k ta baland odam" shartiga ta'sir qilmasligini o'ylab ko'ring — bu greedy + qadamma-qadam qo'yish (insertion) usuliga olib keladi.
  2. Odamlarni balandlik bo'yicha kamayish tartibida, balandlik teng bo'lganda esa k bo'yicha o'sish tartibida saralang; so'ng natija ro'yxatini bo'shdan boshlab, har bir odamni to'g'ridan-to'g'ri o'zining k-indeksiga (pozitsiyasiga) kiritib boring — chunki undan balandroq yoki teng bo'lganlar allaqachon joylashtirilgan.