Mediumbinary-search
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
nums[mid] < nums[mid+1]ise tepe sağda. Herhangi bir tepe yeterli — neden ikili arama hâlâ O(log n)?- Uç tepeler:
nums[-1] = nums[n] = -∞varsayımı ilk/son indeksi yasal tepe yapar mı? - Platolar yok (kesin büyük); eşit komşu olsaydı ne bozulurdu?