Longest Consecutive Sequence
Problem (yeniden ifade)
En uzun ardışık eleman dizisinin uzunluğunu döndür. O(n) zamanda çalışmalı.
Sezgi
Sayıları bir sete koy. Yalnızca öncülü olmayan sayılardan saymaya başla.
Yaklaşımlar
Hash set yalnızca başlangıçlar
DoğrulanmadıFikir. x-1 eksik olan her x için x, x+1, … eksilene kadar say. Maks seriyi tut.
Adım adım. [100,4,200,1,3,2] → 1’den başla → 1..4 uzunluk 4.
Trade-off’lar. Sıralama daha basit O(n log n) ama O(n) kısıtını bozar.
export function longestConsecutive(nums: number[]): number {
const set = new Set(nums);
let best = 0;
for (const x of set) {
if (set.has(x - 1)) continue;
let y = x, len = 1;
while (set.has(y + 1)) { y++; len++; }
best = Math.max(best, len);
}
return best;
}
export function longestConsecutive(nums: number[]): number {
const set = new Set(nums);
let best = 0;
for (const x of set) {
if (set.has(x - 1)) continue;
let y = x, len = 1;
while (set.has(y + 1)) { y++; len++; }
best = Math.max(best, len);
}
return best;
}
Şablon bağlantısı
Hash-set üyelik ve “yalnızca x-1 yoksa koşu başlat.”
Yansıma
- O(n) şartı sıralamayı neden eledirtiyor? Kümeden yalnızca
x-1yokken koşu başlatmak ne kazandırır? - Negatifler ve tek elemanlık dizi: uzunluk 1 geçerli midir?
- Kümeden silerek ziyaret işareti koymazsan aynı koşuyu kaç kez sayarsın?