leetcode:删除并获得点数,解题思路及答案。

leetcode:删除并获得点数

给你一个整数数组 nums ,你可以对它进行一些操作。

每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。

开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/delete-and-earn
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

在这里插入图片描述

很简单的方式:把次数和总数排序起来,再打家劫舍。

解题思路

最简单就是把次数和总数排序起来,在没有出现的数字设置为0,然后再用打家劫舍的方法。
例如(5,3,3,7)就可以利用排序,排成(3,3,5,7),然后从3开始把数补上去,并将取数的次数合列成一个列表,等于(6,0,5,0,7),他分别对应数字(3,4,5,6,7)的总数。最后再打家劫舍。

代码

class Solution:
    def deleteAndEarn(self, nums: List[int]) -> int:
        l = sorted(dict(Counter(nums)).items(),key=lambda x:x[0])  #排序
        nums = []
        n = l[-1][0] #取出数字上限
        m = l[0][0] #取出数字下限

		#总和排序
        for i in l:
            while 1:
                if m<n and i[0]!=m:
                    nums.append(0)
                    m+=1
                else:
                    break
            nums.append(i[0]*i[1])
            m+=1
           
		#打家劫舍代码
        a,b = 0 ,0
        for i in nums:
            a, b = b,max(b,a+i)
        return b




作者:onwards
链接:https://leetcode.cn/problems/delete-and-earn/solution/by-onwards-s0my/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Single_minde

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值