LeetCode如何实现删除与获得点数
发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,小编给大家分享一下LeetCode如何实现删除与获得点数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1题目描述给定一个整
千家信息网最后更新 2024年11月17日LeetCode如何实现删除与获得点数思路:动态规划 通过题目要求,首先要明确一点是: 当选择了一个值获得其点数 ,则其他相同的值 也会选择。 因为当选择一个值时, 相邻值已被 删除,因此 其他相同的值不会被删除,一定会选择到。因此可以建立一个列表value,以值作为下标,记录选择每个值时对应可获得的点数。如:[2,2,3,3,4],value[2]=2*2,value[3]=3*2,value[4]=4*1,所以最后得到value=[0,0,4,6,4]。
小编给大家分享一下LeetCode如何实现删除与获得点数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
1
题目描述
给定一个整数数组 nums ,每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数,同步删除每个等于 nums[i] - 1 或 nums[i] + 1 的元素。初始点数为0,返回可获得的最大点数。如:nums=[3,4,2],返回6。(首先选择4,积累4点数,同时删除3,再选择2,再积累2点数,总共为6。其他方式积累的点数均小于6)
2
题解
中间状态:此处中间状态dp[i]表示从1选择到i可获得的最大点数。
状态转移:一个值在整个过程中只有被删除和被获取点数两个可能,并且获取与否会影响其他数值的被选择情况。因此新来一个数,要么不选,则此时dp[i]=dp[i-1];如果选,则i-1就不能选,此时dp[i]=dp[i-2]+value[i],所以最终dp[i]=max(dp[i-1],dp[i-2]+value[i])。
class Solution: def deleteAndEarn(self, nums: List[int]) -> int: if not nums: return 0 dp = [0]*(max(nums)+1) value = dp.copy() #value = [0]*(max(nums)+1) for i,a in enumerate(nums): value[a]+=a dp[1] = value[1] for i in range(2,max(nums)+1): dp[i]=max(dp[i-1],dp[i-2]+value[i]) return dp[-1]
以上是"LeetCode如何实现删除与获得点数"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
点数
选择
状态
篇文章
积累
最大
相同
内容
题目
下标
不怎么
两个
个数
元素
动态
只有
同时
大部分
思路
情况
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
5.软件开发程序
数据库日期数据类型
开票软件出现连接数据库错误
默纳克服务器显示alce
汇龙网络技术有限公司
电脑管理软件开发需要多少钱
2018年网络安全风险
服务器和数据库名称
谷歌gmail服务器
旅业管理系统数据库失效
广东社交软件开发外包
通安驿服务器价格
基本科学指标数据库esi排名
linux服务器的介绍
杭州网络技术咨询热线
linux下炒股软件开发
端安卓软件开发
php 数据库字典
九零后互联网科技
如何对服务器加固
站群服务器可以加游戏不
电视中心服务器默认密码
厦门网络安全 上市
电脑版方舟生存进化怎么进服务器
网络安全员工作计划
崇明区机电网络技术特点
web服务器和ftp服务器
合肥创新管理软件开发
南方星链购商城软件开发
微信健康码打开服务器繁忙怎么办