[leetcode] 740. Delete and Earn

网友投稿 295 2022-11-29

[leetcode] 740. Delete and Earn

Description

Given an array nums of integers, you can perform operations on the array.

In each operation, you pick any nums[i] and delete it to earn nums[i] points. After, you must delete every element equal to nums[i] - 1 or nums[i] + 1.

You start with 0 points. Return the maximum number of points you can earn by applying such operations.

Example 1:

Input: nums = [3, 4, 2]Output: 6Explanation: Delete 4 to earn 4 points, consequently 3 is also deleted.Then, delete 2 to earn 2 points. 6 total points are earned.

Example 2:

Input: nums = [2, 2, 3, 3, 3, 4]Output: 9Explanation: Delete 3 to earn 3 points, deleting both 2's and the 4.Then, delete 3 again to earn 3 points, and 3 again to earn 3 points.9 total points are earned.

Note:

The length of nums is at most 20000.Each element nums[i] is an integer in the range [1, 10000].

分析

题目的意思是:给你一个数组,每删除一个数,你就会获得那个位置的数值,但是同时你要删一个那个数-1的数,或者该数值+1的数,然后求你最终能够获得的最大的值。

我们首先统计每个数的求和,然后就可以转化成house robber的问题了。dp[i]在于拿或者不拿当前的数得到的最大的数值。这道题我做不出来,看来能够正确理解题意,对解决问题的帮助很大。

代码

class Solution {public: int deleteAndEarn(vector& nums) { vector sums(10001,0); for(auto num:nums){ sums[num]+=num; } vector dp(sums.size(),0); dp[1]=sums[1]; for(int i=2;i

参考文献

​​Delete and Earn问题及解法​​​​[LeetCode] Delete and Earn 删除与赚取​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python用opencv遍历RGB图片各个颜色的部分,生成mask
下一篇:Java 实现一个汉诺塔实战练习
相关文章

 发表评论

暂时没有评论,来抢沙发吧~