ここでのオリジナルタイトルリンク:https://leetcode.com/problems/find-pivot-index/
トピック:
整数の配列を指定し nums
、この配列の「ピボット」インデックスを返すメソッドを書き込みます。
我々は、インデックスの左側の数字の合計は、インデックスの右側の数字の和に等しいインデックスとしてピボットインデックスを定義します。
そのようなインデックスが存在しない場合、我々は返す必要があります-1。複数のピボット・インデックスがある場合は、一番左のピボット指数を返す必要があります。
例1:
入力: NUMS = [1,7、3、6、5、6] 出力:3 説明: インデックス3(NUMS [3] = 6)の左の数字の合計は、インデックス3の右側の数字の和に等しいです。 また、図3は、これが発生する最初のインデックスです。
例2:
入力: NUMS = [1、2、3] 出力:-1 説明: 問題文の中で条件を満たすことはインデックスがありません。
注意:
- 長さ
nums
範囲内であろう[0, 10000]
。 - 各要素は、
nums[i]
範囲内の整数であろう[-1000, 1000]
。
ソリューション:
左から右に、合計をaccumlateとorinigal NUMS配列を更新。
インデックス= 0とnの場合 - 1位、我々はインデックス0の左の合計を扱うことができ、インデックスの右n個の0和である - 1は0です。
次いで和場合、左から右に[I - 1] ==和[N - 1] - 和[i]が、これはピボット指数です。
時間計算:O(n)を。N = nums.length。
スペース:O(1)。
ACのJava:
1 クラスソリューション{ 2 公共 INT pivotIndex(INT [] NUMS){ 3 であれば(NUMS == NULL || nums.length <3 ){ 4 リターン -1 。 5 } 6 7 INT N = nums.length。 8 9 用(INT iは= 1; I <N; I ++ ){ 10 NUMS [I] + = NUMS [I - 1 ]。 11 } 12 13 のために(INT ; I <N I ++ iが0 = {) 14 int型は、私は== = 0を残しましたか?0:NUMS [I - 1 ]。 15 であれば(左== NUMS [N - 1] - NUMS [I]){ 16 リターンI。 17 } 18 } 19 20 リターン -1 。 21 } 22 }
同様のサブアレイの合計はKを等しいです。