【leetcode】面接質問 17.16.マッサージ師(jsで実装)

1.トピック

インタビューの質問 17.16. マッサージセラピスト
ここに画像の説明を挿入

2. アイデア (動的プログラミング)

  1. dp[i] を使用して、長さが i+1 の場合の最適な合計分数を記録します。たとえば、長さが 1 の場合、dp[0] が最適解です。
  2. dp を初期化します。i = 0 の場合、これは配列の最初の要素、つまり nums[0] です。i = 1 の場合、最初の 2 つの要素のうち最大のもの、つまり Math.max(nums[0],nums [1] を選択します。 ]))。
  3. i = 2 の後、現在の要素 nums[i] が選択されているかどうかに応じて、dp[i] には 2 つのケースがあります。nums[i] を選択すると、nums[i-1] を選択できません. このとき、最適解は dp[i] = dp[i - 2] + nums[i]; nums を選択しない場合[i] の場合、i - 1 のときの最適解 dp[i-1] である nums[i -1] を選択できます。これらの 2 つの値のうち最大のものを dp[i] として選択します。
  4. 最後に、n - 1 の添え字の dp 値を返すだけです。

3. コードの実装

/**
 * @param {number[]} nums
 * @return {number}
 */
var massage = function(nums) {
    
    
    const n = nums.length
    if (n === 0) return 0
    let dp = []
    dp[0] = nums[0]
    dp[1] = Math.max(nums[0], nums[1])
    for (let i = 2; i < n; i++) {
    
    
        dp[i] = Math.max(dp[i - 1], nums[i] + dp[i - 2])
    }
    // console.log(dp);
    return dp[n - 1]
};

4. 参考

インタビューの質問 17.16. マッサージセラピスト

おすすめ

転載: blog.csdn.net/weixin_44109827/article/details/129434821