İçeriğe atla
ΣDSA Patterns
Menü
Dil

İkili Arama

Rehber 5 / 6 · Yol 5 / 6

Etkileşimli

Zihinsel model

Bu problem için animasyonlu çözüm. Adımları kaydır veya boşlukla duraklat; değişmezi yüksek sesle yeniden anlat.

Adım 1 / 6
1
2
3
1

any peak is ok

Tepe: komşularından kesin büyük. Sentinel nums[-1]=nums[n]=−∞.

Demo önizleme: Bu çözümler otomatik test paketini geçiyor ama insan tarafından incelenmedi. Trade-off ve yazıları taslak olarak değerlendirin.

Find Peak Element

Problem (yeniden ifade)

Herhangi bir tepe indeksini döndür (komşularından kesinlikle büyük). nums[-1]=nums[n]=-∞.

Sezgi

Artan mid → tepe sağda; değilse tepe sol/mid’de.

Yaklaşımlar

Eğimde binary search

Doğrulanmadı
Zaman O(log n)Alan O(1)

Fikir. nums[mid] < nums[mid+1] ise lo=mid+1; değilse hi=mid.

Yürüyüş. [1,2,3,1] → tepe indeks 2.

Trade-off. Doğrusal max daha basit ama O(log n) değil.

Çözüm
export function findPeakElement(nums: number[]): number {
  let lo = 0, hi = nums.length - 1;
  while (lo < hi) {
    const mid = lo + ((hi - lo) >> 1);
    if (nums[mid]! < nums[mid + 1]!) lo = mid + 1; else hi = mid;
  }
  return lo;
}
export function findPeakElement(nums: number[]): number {
  let lo = 0, hi = nums.length - 1;
  while (lo < hi) {
    const mid = lo + ((hi - lo) >> 1);
    if (nums[mid]! < nums[mid + 1]!) lo = mid + 1; else hi = mid;
  }
  return lo;
}

Şablon bağlantısı

Tepede binary search: her zaman daha yüksek komşuya adım at.

Yansıma