IlmHamroh
JavaScript Full-stack/14-qism. Algoritmlar va ma'lumotlar tuzilmalari59/60-dars18 daqiqa
Mundarija (33)

LeetCode uslubidagi muntazam mashq: naqsh bo'yicha reja va takrorlash jadvali

Qisqacha: Ko'p masala yechish emas, tizimli yechish ishlaydi. Masalalarni naqsh bo'yicha guruhlang: bir hafta oyna va prefiks, keyingi hafta graf. Har masalaga 25–30 daqiqa bering, qotsangiz yechimni o'qing va bir necha kundan keyin o'zingiz qayta yeching. Yechilgan masalalar unutiladi, shuning uchun ularni oraliqli takrorlash bilan qaytaring: to'g'ri yechilsa — keyingi takror uzoqroq, adashilsa — ertaga. Har yechimga qisqa yozuv qoldiring: naqsh, g'oya, murakkablik, qayerda adashdingiz.

Bu darsda

  • Mashq saytlarining farqini bilasiz va maqsadingizga mosini tanlaysiz.
  • Blind 75 va NeetCode 150 kabi ro'yxatlar nima ekanini va ulardan qanday foydalanishni tushunasiz.
  • 14-qism naqshlari bo'yicha bir necha haftalik mashq rejasini tuzasiz.
  • Leitner qutilari bilan takrorlash jadvalini hisoblaydigan kichik dastur yozasiz va uni testlaysiz.

Oldin bilishingiz kerak: Chegaraviy holatlar va algoritmni testlash, Naqshni tanish, Masala yechish jarayoni, Date va vaqt zonalari.

1. Nega bu kerak?

Sardor ikki oy davomida har kuni bitta tasodifiy masala yechdi — jami 60 dan ortiq. Keyin do'sti unga oddiy masala berdi: "Qavslar to'g'ri yopilganmi?" Sardor qotib qoldi. U bu masalani bir oy oldin yechgan edi, lekin yechimni eslay olmadi. Undan ham yomoni — qaysi naqsh kerakligini (stek) ham tanimadi.

Muammo masalalar sonida emas edi. Birinchidan, masalalar tasodifiy edi: bugun graf, ertaga matn, indinga DP. Naqshlar bir-biriga ulanmadi. Ikkinchidan, Sardor yechgan masalasiga hech qachon qaytmadi. Inson xotirasi shunday ishlaydi: takrorlanmagan narsa haftalar ichida xiralashadi.

Bu dars algoritm emas, odat haqida. 14-qismdagi texnikalarni haqiqiy ko'nikmaga aylantirishning amaliy yo'li: qayerda mashq qilish, qaysi tartibda, qanday takrorlash va qanday yozib borish. Oxirida takrorlash jadvalini hisoblaydigan kichik dastur yozamiz — o'zingiz ishlatishingiz uchun.

2. Qayerda mashq qilish

2.1 Saytlar

Algoritm masalalari saytlari ko'p. Ular bir xil ishni qiladi: masala sharti, kod yozish maydoni va avtomatik testlar. Lekin har birining o'z yo'nalishi bor. Quyidagi ro'yxat — misollar (2026-yil oktyabr holati). Saytlar imkoniyatlarini o'zgartirib turadi, shuning uchun ularni o'zingiz tekshiring.

Sayt Nimasi bilan foydali E'tibor bering
LeetCode intervyu uslubidagi masalalarning eng katta to'plamlaridan biri; Easy/Medium/Hard; JavaScript bor ba'zi masalalar va imkoniyatlar pullik (Premium)
Codewars "kata" deb ataladigan masalalar, darajasi "kyu" (8 kyu — eng oson); boshqalarning yechimini ko'rish intervyudan ko'ra til ko'nikmasiga yaqin
HackerRank kompaniyalar ishga olishda onlayn test sifatida ishlatadi; tayyorlanish to'plamlari bor test muhitiga oldindan ko'nikish foydali
Exercism bepul, ochiq kodli; ixtiyoriy mentor sharhi algoritmdan ko'ra toza kodga urg'u
Codeforces vaqt chegarali musobaqalar va reyting olimpiada uslubi, intervyudan qiyinroq

O'zbekistonda ham olimpiada uslubidagi masalalar sayti bor — masalan, robocontest.uz: o'zbek tilidagi bir necha ming masala, mavzu va qiyinlik bo'yicha bo'limlar, muntazam musobaqalar. U o'zbek tilida masala o'qishni xohlaganlar uchun qulay.

2.2 Qaysi birini tanlash?

Maqsadga qarang. Ishga kirish intervyusi uchun — LeetCode yoki HackerRank: masalalar shakli intervyudagiga eng yaqin. JavaScript'ni chuqurroq bilish uchun — Codewars yoki Exercism: boshqalarning yechimlarini o'qish ko'p narsa o'rgatadi. Musobaqa va olimpiada uchun — Codeforces.

Bitta sayt tanlab, uning ustida ishlang. Hamma saytda bittadan masala yechish — tasodifiy mashqning boshqa ko'rinishi.

Diqqat: Saytdagi "Accepted" (qabul qilindi) — yechim saytning testlaridan o'tdi degani, xolos. U yechimning tushunilganini kafolatlamaydi. Masalani tushunmasdan, nusxa yoki AI yordamida "Accepted" olish — mashq emas.

3. Ro'yxatlar: Blind 75 va NeetCode 150

Minglab masala ichidan qaysilarini yechish kerak? Bu savolga javob sifatida bir nechta mashhur ro'yxat paydo bo'lgan:

  • Blind 75 — IT xodimlarining anonim forumi Blind'da "Yangi yil sovg'asi" sarlavhasi bilan e'lon qilingan 75 ta LeetCode masalasi (ro'yxat 2018-yilda tuzilgan). Muallifi — o'sha paytda Facebook'da (hozirgi Meta) ishlagan muhandis Yangshun Tay. Ro'yxat keyin LeetCode forumida qayta tarqalib, "Blind 75" nomini olgan. Keyinroq Yangshun Tay Grind 75 ni tuzdi: o'sha g'oya, haftalarga bo'lingan va yangilangan variant.
  • NeetCode 150 — NeetCode sayti va YouTube kanali muallifi tuzgan 150 ta masala. U Blind 75 ni o'z ichiga oladi va masalalarni naqshlar bo'yicha guruhlaydi: massiv va hashing, ikki ko'rsatkich, suriluvchi oyna, stek, binary search kabi bo'limlar.

Ro'yxatlarning foydasi — tanlov allaqachon qilingan: har naqshdan bir nechta "tipik" masala bor. Lekin ikki narsani halol aytish kerak:

  1. Ro'yxatni tugatish — ishga kafolat emas. Maqsad 75 yoki 150 ta "Accepted" emas, har naqshni tanib, mustaqil yecha olish.
  2. Ro'yxatlar bir-biriga o'xshaydi va eskiradi. Qaysi biri "eng yaxshi" ekani haqida aniq ma'lumot yo'q. Bittasini tanlang va oxirigacha boring.

Bizning 14-qismdagi darslar ham shu naqshlar bo'yicha qurilgan. Shuning uchun keyingi bo'limdagi reja dars nomlaridan foydalanadi.

4. Naqsh bo'yicha reja

4.1 Nega naqsh bo'yicha?

Naqshni tanish darsida ko'rdik: masala sharti texnikaga ishora qiladi. Bu ko'nikma bir naqshdagi bir nechta masalani ketma-ket yechganda shakllanadi. Uch-to'rtta oyna masalasidan keyin "ketma-ket bo'lak" so'zi o'zi oynani eslatadi. Tasodifiy tartibda esa har masala "yangi" bo'lib qoladi.

4.2 Sakkiz haftalik namuna

Quyidagi reja — namuna, qonun emas. Kuniga 1–2 masala, haftasiga 5–8 ta deb hisoblangan. Vaqtingiz kam bo'lsa — haftalarni cho'zing, tartibni o'zgartirmang.

Hafta Naqshlar 14-qism darslari
1 massiv, hash map, ikki ko'rsatkich Hash map naqshlari, Ikki ko'rsatkich
2 suriluvchi oyna, prefiks yig'indi Sliding window, Prefix sum
3 stek, navbat, binary search Stack, Binary search variantlari
4 linked list, daraxtlar Linked list masalalari, Daraxt masalalari
Hafta Naqshlar 14-qism darslari
5 graflar: BFS, DFS, topologik saralash Graflarda BFS va DFS, Topologik saralash
6 heap, intervallar, greedy Priority queue, Intervallar, Greedy
7 backtracking Backtracking asoslari
8 dinamik dasturlash 1D DP, 2D DP

Har hafta bir xil tuzilishda o'tadi. Birinchi kunlarda — Easy masala: naqshning "toza" ko'rinishi. Keyin 3–4 ta Medium. Hafta oxirida esa o'tgan haftalardagi masalalarni takrorlash (keyingi bo'lim). Sakkizinchi haftadan keyin aralash masalalarga o'ting: endi naqshni sarlavhadan emas, shartdan tanish kerak.

4.3 Bitta masalaga qancha vaqt?

Amaliy qoida: 25–30 daqiqa. Shu vaqtda UMPIRE bo'yicha yuring: savollar, misollar, brute force, keyin optimallashtirish. Vaqt tugasa va hech qanday g'oya bo'lmasa — taslim bo'lish emas, boshqa yo'l bilan o'rganish vaqti:

  1. Faqat ishorani o'qing (masalan, naqsh nomini) va yana 10 daqiqa urinib ko'ring.
  2. Hali ham bo'lmasa — yechimni o'qing va har qatorini tushuning. Tushunmagan joyni qo'lda kuzating.
  3. Yechimni yoping va xotiradan qayta yozing.
  4. Masalani takrorlash jadvaliga "adashdim" belgisi bilan qo'shing — 1–3 kundan keyin yana yechasiz.

Bu tartibda o'qilgan yechim ham haqiqiy o'rganishga aylanadi. Muhimi — keyin qaytib, mustaqil yechish.

Tekshirib ko'ring: Masalaga 40 daqiqa urindingiz va yechimni o'qidingiz. Ertasiga uni qanday qilib "yechilgan" deb belgilash to'g'ri?

Javob

Faqat bir necha kundan keyin, yechimga qaramasdan, o'zingiz yozib, testlardan o'tkazganingizda. Yechimni o'qib tushunish — birinchi qadam, lekin u hali ko'nikma emas. Tushundim degan his ko'pincha aldaydi: kod tanish ko'rinadi, lekin bo'sh varaqda yozish boshqa ish.

5. Oraliqli takrorlash

5.1 Unutish egri chizig'i

1885-yilda nemis psixologi Hermann Ebbinghaus o'z xotirasi ustida tajriba o'tkazdi. U ma'nosiz bo'g'inlarni yodladi va vaqt o'tgach qanchasi esda qolganini o'lchadi. Natija: o'rganilgan narsa birinchi kunlarda tez, keyin sekinroq unutiladi. Bu bog'liqlik unutish egri chizig'i deb ataladi. Takrorlangan narsa esa keyingi safar sekinroq unutiladi.

Bundan amaliy usul kelib chiqadi — oraliqli takrorlash (spaced repetition). Materialni bir kunda o'n marta emas, o'sib boruvchi oraliqlarda takrorlash: 1 kundan keyin, 3 kundan keyin, bir haftadan keyin, uch haftadan keyin. Har takrorlash xotirani mustahkamlaydi va keyingisini uzoqroqqa suradi.

5.2 Leitner qutilari

Oraliqli takrorlashning eng sodda shakli — Leitner tizimi. Uni nemis jurnalisti Sebastian Leitner 1970-yillarda o'quv kartochkalari uchun taklif qilgan. Bir nechta quti bor, har birining o'z oralig'i:

  • yangi masala 1-qutiga tushadi va ertaga takrorlanadi;
  • to'g'ri yechilsa — keyingi qutiga o'tadi, oraliq uzayadi;
  • adashilsa — qayerda bo'lishidan qat'i nazar, 1-qutiga qaytadi.

Bizning tanlovimiz: 4 quti, oraliqlar 1, 3, 7 va 21 kun. Bu sonlar qat'iy emas, o'zingizga moslashingiz mumkin. Anki kabi dasturlar oraliqni har karta uchun alohida va murakkabroq formula bilan hisoblaydi, lekin g'oya bir xil.

5.3 Kodda

Bitta masala — bitta "karta": nomi, qutisi va keyingi takrorlash sanasi. Takrorlash natijasiga qarab karta yangilanadi:

js
const INTERVALS = [1, 3, 7, 21]; // 1–4-quti → necha kundan keyin

function addDays(isoDate, days) {
  const d = new Date(`${isoDate}T00:00:00Z`); // UTC — zonasiz
  d.setUTCDate(d.getUTCDate() + days);
  return d.toISOString().slice(0, 10);
}

function review(card, solved, today) {
  const last = INTERVALS.length - 1;
  // yechdi — keyingi quti, adashdi — birinchi quti
  const box = solved ? Math.min(card.box + 1, last) : 0;
  return { ...card, box, due: addDays(today, INTERVALS[box]) };
}

let card = { name: "sovg'a kartasi", box: 0, due: "2026-10-07" };
for (const solved of [true, true, false, true, true]) {
  card = review(card, solved, card.due);
  const result = solved ? "yechdi " : "adashdi";
  console.log(`${result} → ${card.box + 1}-quti, ${card.due}`);
}

Konsolda:

text
yechdi  → 2-quti, 2026-10-10
yechdi  → 3-quti, 2026-10-17
adashdi → 1-quti, 2026-10-18
yechdi  → 2-quti, 2026-10-21
yechdi  → 3-quti, 2026-10-28

Sanalar "2026-10-07" ko'rinishidagi satr — ISO format (Date asoslari). Oxiriga T00:00:00Z qo'shildi. Shuning uchun sana UTC'da o'qiladi va natija kompyuteringiz qaysi vaqt zonasida ekaniga bog'liq emas. setUTCDate oy va yil chegarasini o'zi hal qiladi: 30-oktyabrga 3 kun qo'shilsa, 2-noyabr chiqadi.

{ ...card, box, due } — asl kartani o'zgartirmasdan yangi karta yasaydi (spread). Bu review ni sof funksiya qiladi va testlashni osonlashtiradi.

5.4 To'rt masala, bir oy

Endi 14-qismdagi to'rtta masalani bir oy davomida takrorlaymiz. Ikki marta adashamiz: bronlar da 8-oktyabrda va knapsack da 11-oktyabrda. Qutilarni kun sayin kuzating:

Natija: oy oxirida to'rtala masala ham 4-qutida, lekin ular har xil sondagi takrorlash bilan yetib keldi:

Bir oyda nechta takrorlash: adashgan masala ko'proq qaytadi
  • sovg'a kartasi3 marta
  • lowerBound3 marta
  • bronlar (1 xato)4 marta
  • knapsack (1 xato)5 marta

Manba: Hisob: darsdagi Leitner simulyatsiyasi, oraliqlar 1, 3, 7, 21 kun, 2026-10-08 … 10-31

Bu tizimning asosiy afzalligi: vaqt qiyin masalalarga ketadi. Oson masala uch takrorlashdan keyin uch haftaga "uxlaydi". Adashgan masala esa ertaga yana keladi. Oyiga 15 ta takrorlash — kuniga bitta ham emas.

6. Yechimni tushuntirib yozish

6.1 Yozuv namunasi

Har yechilgan masalaga qisqa yozuv qoldiring. Bu yozuv takrorlashda birinchi o'qiladigan narsa. U kodni emas, fikrni saqlaydi:

text
## Merge Intervals (LeetCode 56) — Medium — 2026-10-08
Naqsh: intervallar → boshlanish bo'yicha saralash
G'oya: saralangandan keyin faqat oxirgi blok bilan solishtirish
Murakkablik: O(n log n) vaqt, O(n) xotira
Qayerda adashdim: <= o'rniga < yozdim — tegib turganlar birlashmadi
Chegaraviy holatlar: bo'sh ro'yxat, biri ikkinchisining ichida
Keyingi takrorlash: 2026-10-11 (2-quti)

"Qayerda adashdim" qatori eng qimmatlisi. Bir necha haftadan keyin xatolaringiz takrorlanishini ko'rasiz: masalan, doim chegarada (< va <=) yoki doim bo'sh kirishda. Bu sizning shaxsiy chegaraviy holatlar varag'ingiz.

6.2 O'zingizga tushuntiring

Yozuvni yozish — o'zingizga tushuntirish. Amerikalik fizik Richard Feynman nomi bilan bog'langan usul shunga asoslangan: biror narsani oddiy so'zlar bilan tushuntira olmasangiz, uni hali tushunmagansiz. "G'oya" qatorini bir gapda yoza olmasangiz — yechimga qayting.

Ovoz chiqarib tushuntirish ham foydali: kauchuk o'rdak usuli eslaysizmi? Intervyuda aynan shu so'raladi: "Yechimingizni tushuntirib bering".

6.3 AI va tayyor yechimlar

AI yordamchilari masalani bir zumda yechib beradi. Mashqda bu — trenajyorda og'irlikni boshqa odamga ko'tartirishga o'xshaydi. Natija bor, lekin mushak o'smaydi. AI bilan samarali ishlash darsidagi qoida mashqda ham amal qiladi: AI'dan ishora so'rang ("bu yerda qaysi naqsh?"), tayyor kodni emas. Yechimni o'qigan bo'lsangiz — xuddi o'zingiz qotib qolgandagidek, «Bitta masalaga qancha vaqt?» bo'limidagi tartibda harakat qiling.

7. Ko'p uchraydigan xatolar

7.1 Son ketidan quvish

"Bu oy 100 ta masala" maqsadi tez yechiladigan Easy masalalarga olib boradi. Tuzatish: maqsadni naqsh bilan qo'ying: "bu hafta — oyna, 5 ta masala, ikkitasi Medium".

7.2 Takrorlamaslik

Yechilgan masalaga hech qachon qaytmaslik — Sardorning xatosi. Tuzatish: har yechilgan masalani takrorlash jadvaliga qo'shing, har kuni avval "bugungi takrorlar", keyin yangi masala.

7.3 Yechimni ko'rib, "tushundim" deyish

O'qilgan yechim tanish ko'rinadi, lekin bo'sh varaqda yozilmaydi. Tuzatish: yechimni yopib, xotiradan qayta yozing; jadvalga "adashdim" bilan qo'shing.

7.4 Faqat qiyinlarini yechish

Hard masalalarda soatlab qotish ruhni tushiradi va vaqtni yeydi. Tuzatish: Easy → Medium tartibi; Hard — naqsh to'liq o'zlashtirilgandan keyin.

7.5 Uzoq tanaffus

Ikki hafta mashqsiz — va yarmi unutiladi. Tuzatish: kam, lekin har kuni. Kuniga 30 daqiqa haftada bir marta 4 soatdan yaxshiroq.

8. Mashqlar

1-mashq (oson): Qutilarni hisoblang

Darsdagi INTERVALS = [1, 3, 7, 21] bilan: masala 3-qutiga o'tdi. Necha kundan keyin takrorlanadi? Javob: [:7]. 4-qutidagi masalada adashdingiz. U qaysi qutiga tushadi? Javob: [:1].

Yechim

3-qutining oralig'i — massivning uchinchi elementi, 7 kun (indeks 2). Adashilsa — qaysi qutida bo'lishidan qat'i nazar, 1-qutiga qaytadi va ertaga takrorlanadi. Leitner tizimining asosiy qoidasi shu: xato — qayta boshidan.

2-mashq (o'rta): Bugungi takrorlar

Funksiya dueToday(cards, today) bugun takrorlanishi kerak bo'lgan kartalarni qaytarsin. Bular — sanasi bugun yoki o'tib ketgan kartalar: kecha takrorlay olmagan bo'lsangiz, ular yo'qolmasin. Tartib: avval eng eski sana, sana teng bo'lsa — kichik quti (ya'ni qiyinroq masala). Ishora: ISO sanalarni satr sifatida solishtirish mumkin. "2026-10-10" < "2026-10-12" — true, chunki yil, oy, kun chapdan o'ngga turibdi.

Yechim
js
function dueToday(cards, today) {
  return cards
    .filter((c) => c.due <= today) // bugun yoki o'tib ketgan
    .toSorted((a, b) => a.due.localeCompare(b.due) || a.box - b.box);
}

const cards = [
  { name: "bronlar", box: 2, due: "2026-10-12" },
  { name: "knapsack", box: 0, due: "2026-10-10" },
  { name: "lowerBound", box: 3, due: "2026-11-08" },
  { name: "sovg'a kartasi", box: 1, due: "2026-10-12" },
];
for (const c of dueToday(cards, "2026-10-12")) console.log(c.name);
console.log(dueToday([], "2026-10-12").length); // 0

Konsolda:

text
knapsack
sovg'a kartasi
bronlar
0

localeCompare satrlarni solishtiradi va manfiy, 0 yoki musbat son qaytaradi — sort aynan shuni kutadi. Sanalar teng bo'lsa (0 — falsy), || ikkinchi kalitga o'tadi: quti raqami. Bir nechta kalitli saralash dagi naqsh. lowerBound noyabrda — bugungi ro'yxatga kirmadi.

3-mashq (qiyin): Takrorlash jadvalini testlang

kurs/mashqlar/14/59-mashq/takrorlash.test.mjs faylida addDays va review ni testlang:

  1. addDays: oy oxiri (10-30 + 3), yil oxiri (12-31 + 1), kabisa yili (2028-02-28 + 1) va oddiy yil (2027-02-28 + 1).
  2. Ketma-ket besh marta yechilsa, qutilar 1, 2, 3, 3, 3 bo'ladi (0 dan boshlangan indeks) — oxirgi qutidan oshib ketmaydi.
  3. Adashilsa — 0-indeks va ertangi sana.
  4. review asl kartani o'zgartirmaydi (ishora: Object.freeze).
Yechim
js
// kurs/mashqlar/14/59-mashq/takrorlash.test.mjs
import { test } from "node:test";
import assert from "node:assert/strict";

const INTERVALS = [1, 3, 7, 21];
const LAST = INTERVALS.length - 1;

function addDays(isoDate, days) {
  const d = new Date(`${isoDate}T00:00:00Z`);
  d.setUTCDate(d.getUTCDate() + days);
  return d.toISOString().slice(0, 10);
}

function review(card, solved, today) {
  const box = solved ? Math.min(card.box + 1, LAST) : 0;
  return { ...card, box, due: addDays(today, INTERVALS[box]) };
}

test("addDays: oy, yil va kabisa yili chegaralari", () => {
  assert.equal(addDays("2026-10-30", 3), "2026-11-02");
  assert.equal(addDays("2026-12-31", 1), "2027-01-01");
  assert.equal(addDays("2028-02-28", 1), "2028-02-29"); // kabisa
  assert.equal(addDays("2027-02-28", 1), "2027-03-01");
});

test("yechdi — keyingi quti, oxirgi qutida qoladi", () => {
  let card = { name: "x", box: 0, due: "2026-10-07" };
  const boxes = [];
  for (let k = 0; k < 5; k++) {
    card = review(card, true, card.due);
    boxes.push(card.box);
  }
  assert.deepEqual(boxes, [1, 2, 3, 3, 3]);
});

test("adashdi — birinchi qutiga, ertaga takror", () => {
  const card = { name: "x", box: 3, due: "2026-10-20" };
  assert.deepEqual(review(card, false, "2026-10-20"),
    { name: "x", box: 0, due: "2026-10-21" });
});

test("asl karta o'zgarmaydi", () => {
  const card = Object.freeze(
    { name: "x", box: 1, due: "2026-10-10" });
  assert.doesNotThrow(() => review(card, true, "2026-10-10"));
  assert.equal(card.box, 1);
});

Papkada node --test ni ishga tushiring. Bizda (Node 24.21.0) shunday chiqdi — millisekundlar sizda boshqacha bo'ladi:

text
✔ addDays: oy, yil va kabisa yili chegaralari (1.4969ms)
✔ yechdi — keyingi quti, oxirgi qutida qoladi (0.778ms)
✔ adashdi — birinchi qutiga, ertaga takror (0.1716ms)
✔ asl karta o'zgarmaydi (0.2016ms)
ℹ tests 4
ℹ suites 0
ℹ pass 4
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 8.9135

Object.freeze obyektni "muzlatadi": uning maydonlarini o'zgartirib bo'lmaydi (Immutability chuqur). Modulda (.mjs) muzlatilgan obyektga yozish TypeError beradi. Shuning uchun review asl kartaga yozsa, test yiqiladi. Sanalar testi chegaraviy holatlar varag'idan: oy, yil va kabisa yili chegarasi — sanalar bilan ishlashdagi eng ko'p xato manbai.

4-mashq: Amaliy tajriba — mashq jurnali

kurs/mashqlar/14/MASHQ-JURNALI.md faylini yarating. Unga «Yozuv namunasi» bo'limidagidek yozuvlar qo'shib boring. Har yangi masala — yozuv va takrorlash sanasi. Birinchi haftaning rejasini ham yozing: qaysi naqsh, qaysi 5–6 masala, qaysi saytdan. takrorlash.mjs faylida esa dueToday ni ishlatib, jurnaldagi sanalardan bugungi takrorlarni chiqaradigan kichik skript yozing (ixtiyoriy).

Yechim

Namuna reja:

text
# 1-hafta: hash map va ikki ko'rsatkich (2026-10-12 … 10-18)
Du: LeetCode 1 Two Sum (Easy)
Se: LeetCode 242 Valid Anagram (Easy)
Ch: LeetCode 167 Two Sum II (Medium)
Pa: LeetCode 15 3Sum (Medium)
Ju: LeetCode 11 Container With Most Water (Medium)
Sh: takrorlash — jadvaldagi bugungi kartalar
Ya: dam olish

Masala raqamlari LeetCode'dagi bilan bir xil — shartlarini o'zingiz o'qing. Jurnal git'da tursa, o'sishingiz tarixda ko'rinadi.

bash
git add 14/MASHQ-JURNALI.md 14/59-mashq
git commit -m "14/59: mashq jurnali va Leitner takrorlash testlari"

9. Real ishda

  • Intervyuga tayyorgarlik. Ko'p kompaniyalarda texnik intervyuning bir bosqichi — algoritm masalasi. Tayyorlanish uchun odatda bir necha hafta yoki oy ketadi. Naqsh bo'yicha reja va takrorlash bu vaqtni samarali qiladi. Intervyuning o'zini kursning karyera qismida alohida o'rganamiz.
  • Ish joyida. Kundalik ishda LeetCode masalasi kam uchraydi, lekin naqshlar uchraydi. Bu haqda keyingi darsda — real frontend va backend misollari bilan.
  • Har qanday o'qish. Leitner qutilari va oraliqli takrorlash — chet tili so'zlari, atamalar va buyruqlar uchun ham ishlaydi. Shu kursning atamalarini ham shunday takrorlash mumkin.
  • Jamoada. Ba'zi jamoalar haftalik "algoritm soati" o'tkazadi: bitta masalani birga yechib, yechimlarni muhokama qiladi. Tushuntirib yozish odati shu yerda ham kerak bo'ladi.

Xulosa

  • Bitta saytni maqsadga qarab tanlang: intervyu — LeetCode yoki HackerRank, til — Codewars yoki Exercism, musobaqa — Codeforces.
  • Blind 75 va NeetCode 150 — naqshlar bo'yicha tanlangan ro'yxatlar. Maqsad ularni "tugatish" emas, naqshlarni o'zlashtirish.
  • Naqsh bo'yicha haftalik reja: Easy → Medium, hafta oxirida takrorlash. Bitta masalaga 25–30 daqiqa, keyin ishora yoki yechim, so'ng xotiradan qayta yozish.
  • Oraliqli takrorlash: Leitner qutilari, to'g'ri — keyingi quti, xato — boshiga. Oyiga 15 takrorlash to'rt masalani mustahkamladi.
  • Har yechimga yozuv: naqsh, g'oya, murakkablik, qayerda adashdim.

Keyingi dars: Algoritmlar real frontend va backend ishida — LRU kesh, noaniq qidiruv, diff, pagination, rate limiting va debounce: 14-qism naqshlari kundalik ishda va vazifalar ilovasining o'lchovlarida.

Manbalar

  • Hermann Ebbinghaus, "Über das Gedächtnis" (Xotira haqida), 1885.
  • Sebastian Leitner, "So lernt man lernen" (Qanday o'rganish kerak), 1972.
  • Tech Interview Handbook: "Grind 75" va "Blind 75" — techinterviewhandbook.org
  • NeetCode: "NeetCode 150" — neetcode.io
  • Saytlar: leetcode.com, codewars.com, hackerrank.com, exercism.org, codeforces.com, robocontest.uz (2026-10 holatiga).
Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
LeetCode uslubidagi muntazam mashq: naqsh bo'yicha reja va takrorlash jadvali — IlmHamroh