Menu
CoddyTech

Rentetan Terpanjang

Termasuk bagian Logika dan Alur dalam perjalanan Swift di Coddy. Pelajaran 35 dari 56.

Streak adalah rangkaian hari berturut-turut saat suatu kebiasaan ditandai selesai. Untuk hari [1, 2, 3, 5, 6], streak terpanjang adalah 3 (hari 1-3).

Menghitungnya setelah kamu memiliki daftar hari yang sudah diurutkan cukup dengan pemindaian linear sederhana: bandingkan setiap hari dengan hari sebelumnya, lanjutkan rangkaian saat hari-harinya berurutan, jika tidak, mulai ulang.

func longestStreak(_ days: [Int]) -> Int {
    let sorted = days.sorted()
    var best = 0
    var run = 0
    var prev: Int? = nil
    for d in sorted {
        if let p = prev, d == p + 1 {
            run += 1
        } else {
            run = 1
        }
        if run > best { best = run }
        prev = d
    }
    return best
}

Pola "catat perulangan saat ini + yang terbaik sejauh ini" muncul berulang kali dalam banyak soal. Kenali pola ini sekali, dan kamu akan menguasainya selamanya.

challenge icon

Tantangan

Sedang

Baca satu baris input: daftar entri habit:day yang dipisahkan koma. Buat dictionary yang sama seperti di pelajaran sebelumnya, lalu hitung rentang hari berturut-turut terpanjang selama seminggu untuk setiap kebiasaan.

Cetak kebiasaan dalam urutan alfabetis, satu per baris, dengan format:

<habit>: streak=<n>

Untuk input read:1,read:2,read:3,read:5,workout:2,workout:4, output-nya adalah:

read: streak=3
workout: streak=1

Coba sendiri

var habits: [String: [Int]] = [:]
let ops = readLine()!.components(separatedBy: ",")
for op in ops {
    let parts = op.components(separatedBy: ":")
    let day = Int(parts[1])!
    if !(habits[parts[0], default: []].contains(day)) {
        habits[parts[0], default: []].append(day)
    }
}

// TODO: hitung rentetan terpanjang untuk setiap kebiasaan, lalu cetak berdasarkan urutan nama dengan format 'name: streak=n'
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Playground Swift