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.
Tantangan
SedangBaca 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=1Coba 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'
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami string
Jumlah dan indeksHuruf besar, huruf kecil, dan hapus spasiMencari dalam stringMemisahkan dan menggabungkanMengganti substringUlasan: Memeriksa nama pengguna4set
Membuat setGabungan dan IrisanSelisih dan Selisih SimetrisHimpunan Bagian dan Himpunan SupersetRingkasan: Filter Tag7Proyek: Pelacak Kebiasaan
Gambaran Umum ProyekTandai Selesai2Rentang dan Langkah
Rentang Tertutup vs Setengah TerbukaLangkahMetode RentangRentang dalam SwitchRangkuman: Kisi KalenderLatihan sendiri: Playground Swift