90. マッサージ師
トピックリンク
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/the-masseuse-lcci
タイトル説明
既知のマッサージセラピストは、予約要求の安定したストリームを受信する、予約は、各接続又は未接続のために選択することができます。彼女は隣の予定を受け入れることができなかったので、各予約サービスの間、休息する時間を持っています。予約要求、最適なセット(最長総予約)を見つけるためにマッサージセラピストの予約の順序を考えると、数分の合計数を返します。
注:この問題は、元のタイトルに比較的小さな変更であります
例1:
入力:[1,2,3,1]
出力:4
説明:予約番号と予約番号3、全長= 3 + 1 = 4を選択します。
例2:
入力:[2,7,9,3,1]
出力:12
説明:予約番号を選択し、3番及び5番予約予約、全長= 2 + 9 + 1 = 12。
例3:
入力:[2,1,4,5,3,1,1,3]
出力:12
説明:1つの選択番号の予約、予約番号3、第5号及び第8号予約予約、全長= 2 + 3 + 4 + 3 = 12。
キーテクノロジー
ダイナミックプログラミング
トピック分析
- NUMSが空の場合、0を返します。
- NUMS [0]とNUMS [1]に大きな値をとるので、1番または2番予定の予約から出発して決定。
- 最大位置i及びサブアレイを記憶するためDP [I]。
- [I-1]現在の要素(NUMS [I])+ DP [I-2] DPよりも大きいか否かを決定しなければならないので、予約に隣接した位置が、確保できない場合は、状態遷移方程式を記述することが可能である:DP [I] = math.max(DP [I-1]、DP [I-2] + NUMS [I])。
/ ** * @param {数[]} NUMS * @return {数} * / VARマッサージ=関数(NUMS){ LEN = nums.lengthましょう。 IF(LEN === 0 || NUMS == null)のリターン0; DPましょう=新しいアレイ(LEN).fill(0); DP [0] = NUMS [0]。 DP [1] = Math.max(NUMS [0]、NUMS [1])。 {(; I <lenのI ++ iは2 =せて)のために 、DP [I] = Math.max(DP [I-1]、DP [I-2] + NUMS [I])。 } 戻りDP [LEN-1]。 }。