Find Pivot Index
Problem (yeniden ifade)
Sol elemanların toplamının sağ elemanların toplamına eşit olduğu en soldaki pivot indeksini döndür; yoksa -1.
Sezgi
Toplam sabit; yürüdükçe leftSum büyür ve rightSum = total, leftSum, nums[i].
Yaklaşımlar
Koşan sol toplam
DoğrulanmadıFikir. total hesapla. Her i için leftSum == total, leftSum, nums[i] ise i döndür. Değilse leftSum += nums[i].
Adım adım. [1,7,3,6,5,6] → pivot indeks 3 (1+7+3 = 5+6).
Trade-off’lar. Önek dizileri O(n) alan kullanır; koşan toplam yeter.
export function pivotIndex(nums: number[]): number {
const total = nums.reduce((a, b) => a + b, 0);
let left = 0;
for (let i = 0; i < nums.length; i++) {
if (left === total - left - nums[i]!) return i;
left += nums[i]!;
}
return -1;
}
export function pivotIndex(nums: number[]): number {
const total = nums.reduce((a, b) => a + b, 0);
let left = 0;
for (let i = 0; i < nums.length; i++) {
if (left === total - left - nums[i]!) return i;
left += nums[i]!;
}
return -1;
}
Şablon bağlantısı
Önek / yürüyen toplam: left-sum == total − left − nums[i].
Yansıma
leftSum == total - leftSum - nums[i]. Tek geçişte total, ikinci geçişte pivot. Neden iki diziye gerek yok?- En sol pivot: ilk isabette return. Tüm dizi pivot 0 veya n-1 olabilir (sol/sağ boş toplam 0).
- Boş sol/sağ toplamı 0 kabul mü?