刪除與獲得點數

2021-10-07 11:08:15 字數 639 閱讀 9615

一、題目描述

二、題目分析

本題使用動態規劃得以解決,思路參考:

解決本題的關鍵在於不要被陣列這一因素束縛。由於題目對最大元素有限制,因此事實上我們可以申請乙個下標足以涵蓋陣列中最大數的陣列all,all陣列的下標 i 代表實際的元素,all[i]代表題目給的陣列有多少個元素i(雜湊表),獲得了dp陣列之後,我們可以對dp進行一次便利,對於每乙個元素,我們都有兩種做法,取該元素獲得該元素的得分,或者不取它,當我們不取時,則獲得的分數為dp[i-1],當取的時候,分數為dp[i-2]+all[i]*i,比較兩者大小取最大值。(當然i-1,i-2可能不存在於題目給的陣列,但是沒關係,因為沒有就是0)

三、**

public int deleteandearn(int nums) 

int all = new int[max + 1];

for (int i: nums)

int dp = new int[max+1];

dp[1] = all[1];

dp[2] = math.max(dp[1], all[2] * 2);

for (int i = 2; i <= max; i++)

return dp[max];

}

刪除與獲得點數

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

740 刪除並獲得點數

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

leetcode演算法題 刪除與獲得點數

以nums陣列最大的數來作為字典的最大索引,比如最大數為max,那麼字典的範圍就是從1到max,這樣如果字典中索引不在nums陣列裡就置0,轉換為了不能取相鄰兩個數,就可以用打家劫舍的方法來做了。dp i 表示nums i 獲得最大的點數狀態轉移 dp i max dp i 1 dp i 2 dic...