En Uzun Seri
Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 35 / 56.
Bir seri, bir alışkanlığın tamamlandı olarak işaretlendiği ardışık günler dizisidir. [1, 2, 3, 5, 6] günleri için en uzun seri 3 gündür (1-3. günler).
Sıralanmış bir day listeniz olduğunda bunu hesaplamak basit bir doğrusal taramadır: her day değerini önceki değerle karşılaştırın; ardışıklarsa mevcut run değerini uzatın, aksi takdirde sıfırlayın.
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
}“Mevcut run + şimdiye kadarki en iyi” kalıbı birçok problemde tekrarlanır. Bir kez tanı ve sonsuza dek senin olsun.
Görev
OrtaTek bir giriş satırı okuyun: virgülle ayrılmış habit:day girdilerinden oluşan bir liste. Önceki derste oluşturduğunuz sözlüğün aynısını oluşturun, ardından her alışkanlık için hafta boyunca en uzun ardışık gün serisini hesaplayın.
Alışkanlıkları alfabetik sırayla, her satıra bir tane gelecek şekilde şu biçimde yazdırın:
<habit>: streak=<n>read:1,read:2,read:3,read:5,workout:2,workout:4 girdisi için çıktı şöyledir:
read: streak=3
workout: streak=1Kendin dene
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: alışkanlık başına en uzun seri, isme göre sıralı yazdır 'name: streak=n'
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Stringler Derinlemesine
Sayma ve İndekslerBüyük-Küçük Harf ve KırpmaStringlerde AramaBölme ve BirleştirmeAlt Stringleri DeğiştirmeÖzet - Kullanıcı Adı Kontrolü4Kümeler
Küme OluşturmaBirleşim ve KesişimFark ve Simetrik FarkAlt Küme ve Üst KümeÖzet - Etiket Filtresi7Proje - Alışkanlık Takibi
Projeye Genel BakışTamamlandı Olarak İşaretle10Proje - Quiz Motoru
Projeye Genel BakışSoruları Sorma2Aralıklar ve Adımlar
Kapalı ve Yarı AçıkStride (Adım)Aralık MetotlarıSwitch İçinde AralıklarÖzet - Takvim Izgarası5Yüksek Mertebeden Fonksiyonlar Bölüm 1
MapFilterReduceMap, filter, reduce zincirlemeÖzet - Kelime İstatistikleriKendi başına pratik yap: Swift playground