学習目標:
目標:Javaで学んだ知識を上手に活用する
主題の内容:
この記事の内容:Javaでの実装:配列の中心インデックスの検索
タイトル説明:
整数の配列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
説明:
配列にこの条件を満たすセンターインデックスがありません。
問題解決のアイデア:
逆の考え方を使うことができます。そのようなインデックスがある場合、左の値と右の値の合計とインデックス位置の要素の合計は配列の合計に等しく、左の値の合計は等しくなります。右側の値の合計に;
したがって、配列をトラバースできます。左側のすべての値の合計に2を掛けたものに現在の値を加えたものが、配列の合計に等しくなるような位置がある場合、その場合、位置は中央のインデックスです。
実装コード:
public class Practice_01 {
public static void main(String[] args) {
int[] nums = {
1,2,3,4,3,2,1};
System.out.println(pivotIndex(nums));
}
public static int pivotIndex(int[] nums) {
int sum = 0;
int leftSum = 0;//索引左侧元素和
for (int i : nums) {
//数组元素和
sum += i;
}
for (int i = 0; i < nums.length; i++) {
if (2 * leftSum + nums[i] == sum) {
return i;
} else {
leftSum += nums[i];
}
}
return -1;
}
}
演算結果:
3