Langsung ke konten
Membaca soal

Pelajaran 1.3

Berburu edge case

7 menit · 7 langkah

  1. Langkah 1 dari 7 · Penjelasan

    Edge case adalah input di pinggir aturan. Cek daftar ini setiap kali: kosong, satu item, duplikat atau seri, negatif, ukuran maksimal.

    Contoh soal: "Return angka terbesar kedua yang berbeda, atau -1 kalau tidak ada." Untuk [4, 9, 9, 2], jawabannya 4, bukan 9. 9 yang kedua adalah duplikat, jadi tidak boleh dihitung sebagai angka terbesar kedua.

  2. Langkah 2 dari 7 · Pilih pendekatan

    Constraint: 1 ≤ nums.length ≤ 10⁵ dan -10⁹ ≤ nums[i] ≤ 10⁹.
    Input mana yang tidak mungkin muncul di test?

    1. []
    2. [-3]
    3. [7, 7, 7]
    4. Array berisi 100.000 angka
  3. Langkah 3 dari 7 · Tebak hasilnya

    Kode ini me-return angka terbesar kedua yang berbeda, atau -1 kalau tidak ada. Apa yang di-return untuk [5, 5]?

    function solution(nums) {  let first = -Infinity  let second = -Infinity  for (let i = 0; i < nums.length; i++) {    const n = nums[i]    if (n > first) {      second = first      first = n    } else if (n > second && n < first) {      second = n    }  }  return second === -Infinity ? -1 : second}
    1. -1
    2. 5
    3. 0
  4. Langkah 4 dari 7 · Cari bug-nya

    Kode ini harus me-return angka terbesar kedua yang berbeda, atau -1 kalau tidak ada. Ia lolos [4, 9, 2], tapi gagal di hidden test [9, 9] (harusnya -1). Ketuk baris yang salah.

    function solution(nums) {  let first = -Infinity  let second = -Infinity  for (let i = 0; i < nums.length; i++) {    const n = nums[i]    if (n > first) {      second = first      first = n    } else if (n > second) {      second = n    }  }  return second === -Infinity ? -1 : second}
  5. Langkah 5 dari 7 · Tebak hasilnya

    Kode ini me-return angka terbesar kedua yang berbeda, atau -1 kalau tidak ada. Apa hasilnya untuk [-3, -7]?

    function solution(nums) {  let first = -Infinity  let second = -Infinity  for (let i = 0; i < nums.length; i++) {    const n = nums[i]    if (n > first) {      second = first      first = n    } else if (n > second && n < first) {      second = n    }  }  return second === -Infinity ? -1 : second}
    1. -7
    2. -1
    3. -3
  6. Langkah 6 dari 7 · Tulis kodenya

    solution(nums)

    Return angka terkecil di nums. Kalau nums kosong, return null.
    Constraint: 0 ≤ nums.length ≤ 100, -1000 ≤ nums[i] ≤ 1000.

    function solution(nums) {  // [3, 1, 2] -> 1  // [] -> null }
  7. Langkah 7 dari 7 · Ringkasan

    • Daftar cek edge case: kosong, satu item, duplikat, negatif, ukuran maksimal.
    • Constraint memberi tahu mana yang mungkin dan mana yang tidak.
    • Nilai awal -Infinity atau nums[0] aman untuk angka negatif. Nilai awal 0 tidak.

    Kartu pola

    Daftar cek edge case
    Kapan dipakai: Setelah paham soal, sebelum ngoding. Tulis satu test case kecil untuk tiap item yang mungkin.
    // []        kosong / empty// [x]       satu item / one item// [x, x]    duplikat / duplicates// [-x]      negatif / negatives// n = max   ukuran maksimal / max size