186 / 205
LeetCode · HardQiyin30 ball· ~45 daqiqa

Reverse Nodes in k-Group

Eslatma: Ushbu masalada bog'langan ro'yxat o'rniga massiv (array) beriladi.

Sizga butun sonlardan iborat head massivi va musbat butun son k berilgan. Siz massivni har k ta elementdan iborat guruhlarga bo'lib, har bir guruh elementlarini teskari tartibda joylashtirishingiz kerak. Agar eng oxirida qolgan elementlar soni k dan kam bo'lsa, ularni o'zgarishsiz qoldiring.

Siz ro'yxatdagi qiymatlarni shunchaki o'zgartirmasdan, ularni in-place teskari qilib (dastlabki xotiradan) ishlatishingiz mumkin (massiv uchun in-place yoki yangi massiv qaytaring).

example.go
func solve(head []int, k int) []int {
    // ...
}

Misollar

kod
Input: head = [1,2,3,4,5], k = 2
Output: [2,1,4,3,5]
Tushuntirish: Guruhlar: [1,2], [3,4], [5]. Ularni teskari qilsak: [2,1], [4,3], [5]
kod
Input: head = [1,2,3,4,5], k = 3
Output: [3, 2, 1, 4, 5]
kod
Input: head = [1, 2], k = 2
Output: [2, 1]
kod
Input: head = [1, 2, 3], k = 1
Output: [1, 2, 3]

Maslahatlar

  1. Massivni k tadan bo'laklarga bo'lib, har bir to'liq (aynan k ta elementdan iborat) bo'lakni alohida teskari qiling; oxirida k tadan kam qolgan bo'lak bo'lsa, uni tegmasdan qoldiring.
  2. start ni 0 dan boshlab har safar k ga oshirib boring, lekin faqat start+k <= n bo'lgandagina o'sha bo'lakni ikkita ko'rsatkich (bo'lak boshi va oxiri) bilan ichiga qarab yurib almashtiring (start+k > n bo'lgan oxirgi qoldiqni tegmasdan qoldiring).