Find Pivot Index
問題文
整数 num の配列を指定して、この配列のピボット インデックスを計算します。
ピボット インデックスは、インデックスの厳密に左側にあるすべての数値の合計が、インデックスの厳密に右側にあるすべての数値の合計と等しいインデックスです。
インデックスが配列の左端にある場合、左側には要素がないため、左側の合計は 0 になります。これは配列の右端にも当てはまります。
一番左のピボットインデックスを返します。そのようなインデックスが存在しない場合は、-1 を返します。
コード
class Solution {
public int pivotIndex(int[] nums) {
//①
int leftSum =0, rightSum=0;
for (int n : nums){
rightSum += n;
}
//②
int i=-1;
//③
for (int n : nums){
i++;
rightSum-=nums[i];
if(leftSum==rightSum) return i;
leftSum+=nums[i];
}
return-1;
}
}
解答手順
①配列の左端から右端まで足した合計値を求める。
この①で得た合計値は、右側の合計値を求める際に使用する。
②配列の場所を指定するための変数を用意する。-1を設定する理由は、配列の0番目から要素を指定できるようにするため。
③左側の合計値と右側の合計値を求める
まず、①で求めた合計値から配列のi番目を引く。ここで得られた値は、右側の合計値になる。
rightSumがleftSumより1回多く計算された合計値が、leftSumの合計値と一致するため、leftSumの前で条件分岐を設定する。
その後、leftSumにi番目の要素を足した数を設定する。
一致しない場合は-1で返す。