Daily Temperatures
Problem (yeniden ifade)
Günlük sıcaklıklar verilir; answer[i], i. günden sonra daha sıcak bir güne kaç gün bekleneceğini tutar. Yoksa answer[i]=0.
Sezgi
Sonraki daha büyük eleman → indekslerin monoton azalan yığını. Daha sıcak gün gelince pop edip mesafeyi yaz.
Yaklaşımlar
Monoton azalan yığın
Tested onlyFikir. Yığında sıcaklıkları azalan indeksler. Her gün için tepe daha serinse pop edip answer yaz.
Adım adım. [73,74,75,71,69,72,76,73] → [1,1,4,2,1,1,0,0].
Trade-off’lar. Doğrusal vs O(n²) iç içe tarama. Yığında değer değil indeks tutulur.
export function dailyTemperatures(temperatures: number[]): number[] {
const n = temperatures.length;
const ans = new Array<number>(n).fill(0);
const stack: number[] = [];
for (let i = 0; i < n; i++) {
while (stack.length && temperatures[i]! > temperatures[stack[stack.length - 1]!]!) {
const j = stack.pop()!;
ans[j] = i - j;
}
stack.push(i);
}
return ans;
}
export function dailyTemperatures(temperatures: number[]): number[] {
const n = temperatures.length;
const ans = new Array<number>(n).fill(0);
const stack: number[] = [];
for (let i = 0; i < n; i++) {
while (stack.length && temperatures[i]! > temperatures[stack[stack.length - 1]!]!) {
const j = stack.pop()!;
ans[j] = i - j;
}
stack.push(i);
}
return ans;
}
Şablon bağlantısı
Monoton yığın sonraki-daha-büyük şablonu.
Yansıma
- 90 saniyede hangi kalıp bunu ele verdi?
- Standart şablondan ne değişti?
- Mevcut çözümü ne bozar?