トピック:
整数の配列numsが与えられた場合、配列の「センターインデックス」を返すメソッドを記述してください。
配列の中央のインデックスは配列のインデックスであり、左側のすべての要素の合計は、右側のすべての要素の合計に等しくなります。
センターインデックスが配列に存在しない場合は、-1が返されます。配列に複数の中央インデックスがある場合は、左に最も近いものを返す必要があります。
注:中央のインデックスは、配列の両端に表示される場合があります。
例1:
入力:nums = [1、7、3、6、5、6]
出力:3
説明:
インデックス3(nums [3] = 6)の左側の合計(1 + 7 + 3 = 11)、および右サイド番号の合計(5 + 6 = 11)は等しい。
同時に、3は要件を満たす最初のセンターインデックスでもあります。
例2:入力:nums = [1、2、3]
出力:-1
説明:
配列にこの条件を満たすセンターインデックスがありません。
例3:入力:nums = [2、1、-1]
出力:0
説明:
インデックス0の左側に要素がなく、合計は0と見なされます。右側の数値の合計は1 +( -1)= 0であり、2つは等しい。
例4:入力:nums = [0、0、0、0、1]
出力:4
説明:
インデックス4の左側の数値の合計は0です。右側に要素はなく、合計は0と見なされます。そして2つは等しい。
促す:
numsの長さの範囲は[0、10000]です。
nums [i]は、[-1000、1000]の範囲の整数になります。
アイデア:
プレフィックスと
公式アイデアを見るには
コード:
/**
* @param {number[]} nums
* @return {number}
*/
var pivotIndex = function(nums) {
const total = nums.reduce((a, b) => a + b, 0);
let sum = 0;
for (let i = 0; i < nums.length; i++) {
if (2 * sum + nums[i] === total) {
return i;
}
sum += nums[i];
}
return -1;
};