[LeetCode] 724.ピボットインデックスの検索配列の中心インデックスの検索(Easy)(JAVA)
件名アドレス:https://leetcode.com/problems/find-pivot-index/
タイトル説明:
整数numsの配列が与えられた場合、この配列の「ピボット」インデックスを返すメソッドを記述します。
ピボットインデックスは、インデックスの左側にあるすべての数値の合計が、インデックスの右側にあるすべての数値の合計に等しいインデックスとして定義されます。
そのようなインデックスが存在しない場合は、-1を返す必要があります。複数のピボットインデックスがある場合は、左端のピボットインデックスを返す必要があります。
例1:
Input: nums = [1,7,3,6,5,6]
Output: 3
Explanation:
The sum of the numbers to the left of index 3 (nums[3] = 6) is equal to the sum of numbers to the right of index 3.
Also, 3 is the first index where this occurs.
例2:
Input: nums = [1,2,3]
Output: -1
Explanation:
There is no index that satisfies the conditions in the problem statement.
制約:
- numsの長さは[0、10000]の範囲になります。
- 各要素nums [i]は、[-1000、1000]の範囲の整数になります。
一般的なアイデア
整数型の配列番号が与えられた場合、配列の「センターインデックス」を返すメソッドを記述します。
配列の中心インデックスを次のように定義します。配列の中心インデックスの左側にあるすべての要素の合計は、右側にあるすべての要素の合計に等しくなります。
配列に中央インデックスがない場合は、-1を返す必要があります。配列に複数の中央インデックスがある場合は、左に最も近いものを返す必要があります。
問題解決方法
- 最初にもう一度トラバースして、配列の合計を見つけます
- 「センターインデックス」は配列を2つに分割し、左側と右側が同じであるため、もう一度トラバースします。したがって、pre * 2 + nums [i] == sumの位置は「センターインデックス」です。
- 時間計算量O(n)
class Solution {
public int pivotIndex(int[] nums) {
int sum = 0;
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
}
int pre = 0;
for (int i = 0; i < nums.length; i++) {
if (pre * 2 + nums[i] == sum) return i;
pre += nums[i];
}
return -1;
}
}
実行時間:1ミリ秒、Javaユーザーの100.00%を上回っています
メモリ消費量:39.2 MB、Javaユーザーの40.28%を上回っています