すべてのチャレンジ
簡単 0件解決済み 正答率0%

配列を非減少にする

各値が直前の値以上になるように、必要な最小のインクリメント回数を求めてください。

1回の操作で配列の1つの値を1だけ増やすことができます。配列を非減少(各値が直前の値以上)にしてください。値を減らしたり、順序を変更したりすることはできません。

increasing_array(numbers) を実装してください。

入力

numbers: 元の順序の値の配列。

出力

必要な単位インクリメントの合計の最小値を返してください。

制約

1 ≤ 長さ ≤ 200,000。各値は1以上1,000,000,000以下。符号付き64ビットの結果を使用してください。

例

例 1
入力:
numbers = [4, 1, 3]

期待される出力:
expected = 4
入力:
std::vector<long long> numbers = {4, 1, 3};

期待される出力:
long long expected = 4;
入力:
long[] numbers = new long[] {4, 1, 3};

期待される出力:
long expected = 4;

解説

1を4にするのに3回、3を4にするのに1回操作します。結果は [4, 4, 4] となり、合計4回の操作が必要です。

例 2
入力:
numbers = [1, 2, 2, 5]

期待される出力:
expected = 0
入力:
std::vector<long long> numbers = {1, 2, 2, 5};

期待される出力:
long long expected = 0;
入力:
long[] numbers = new long[] {1, 2, 2, 5};

期待される出力:
long expected = 0;

解説

すべての値がすでに直前の値以上です。同じ値が隣り合っていても問題ありません。

参考資料

この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。

他の人の解答から学ぶ

コミュニティの解答

まだ公開された解答がありません。この課題を解いて最初の解答を共有しましょう。