740 刪除與獲得點數 動態規劃

2021-10-07 09:38:30 字數 1226 閱讀 3539

題目描述:

給定乙個整數陣列 nums ,你可以對它進行一些操作。

每次操作中,選擇任意乙個 nums[i] ,刪除它並獲得 nums[i] 的點數。之後,你必須刪除每個等於 nums[i] - 1 或 nums[i] + 1 的元素。

開始你擁有 0 個點數。返回你能通過這些操作獲得的最大點數。

示例 1:

輸入: nums = [3, 4, 2]

輸出: 6

解釋:刪除 4 來獲得 4 個點數,因此 3 也被刪除。

之後,刪除 2 來獲得 2 個點數。總共獲得 6 個點數。

示例 2:

輸入: nums = [2, 2, 3, 3, 3, 4]

輸出: 9

解釋:刪除 3 來獲得 3 個點數,接著要刪除兩個 2 和 4 。

之後,再次刪除 3 獲得 3 個點數,再次刪除 3 獲得 3 個點數。

總共獲得 9 個點數。

注意:

nums的長度最大為20000。

每個整數nums[i]的大小都在[1, 10000]範圍內。

方法 1 動態規劃

主要思路:

(1)題目中的意思是:當獲取某個值後,則其相鄰大小的值就不能夠再獲得了;

(2)則可以以輸入陣列中的值為索引,新建立乙個陣列,在該陣列中每個元素儲存該索引與其在輸入陣列**現的次數的乘積,既該索引值在輸入陣列的出現的和;

(3)則可以先遍歷輸入陣列,找出陣列中的最大值maxvalue,並建立大小為maxvalue+1的陣列lables,來處理輸入資料,既將輸入陣列中的每個元素加入到新建的陣列lables對應的位置;

(4)此時,轉化為了對陣列lables使用動態規劃的問題:

(a)若當前的元素lables[ i ]需要加入到最終的結果中,則其前乙個元素就不能加入到結果中,既不能使用dp[ i-1 ],需要更前面的乙個dp[ i-2 ]來更新當前資料dp[ i ],既dp[ i-2 ]+lables[ i ];

(b)若當前元素lables[ i ]不加入到最終的結果,則前面的乙個元素加入到了最終的結果,既dp[ i ] = dp[ i-1 ];

class

solution

return dp.

back()

;}};

740 刪除並獲得點數

給你乙個整數陣列 nums 你可以對它進行一些操作。每次操作中,選擇任意乙個 nums i 刪除它並獲得 nums i 的點數。之後,你必須刪除每個等於 nums i 1 或 nums i 1 的元素。開始你擁有 0 個點數。返回你能通過這些操作獲得的最大點數。示例 1 輸入 nums 3,4,2 ...

Leetcode 740 刪除與獲得點數

題目鏈結 思路 打家劫舍4?一開始看到左右都受影響就想到了leetcode 312 戳氣球,但是後來才發現這就是打家劫舍鴨!只要你選用了a,那麼a 1和a 1都和你無關了,那麼肯定是要貪心的選全部的a才對得起損失。問題轉化為對於每乙個元素,不能選它的臨近值 不能偷隔壁 聯動成功!具體 1.將nums...

leetcode740 刪除與獲得點數

給定乙個整數陣列 nums 你可以對它進行一些操作。每次操作中,選擇任意乙個 nums i 刪除它並獲得 nums i 的點數。之後,你必須刪除每個等於 nums i 1 或 nums i 1 的元素。開始你擁有 0 個點數。返回你能通過這些操作獲得的最大點數。示例 1 輸入 nums 3 4,2 ...