动态规划——删除并获得点数

news2024/11/26 2:35:42

题目链接

leetcode在线oj题——删除并获得点数

题目描述

给你一个整数数组 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 个点数。

题目提示

  • 1 <= nums.length <= 2 * 104
  • 1 <= nums[i] <= 104

解题思路

直接看题目描述可能无法理解题目的具体含义,下面用一个示例来帮助理解题意

首先,题目给定一个nums数组
在这里插入图片描述
随便选一个数字,得到这个数字对应的点数,然后删除掉这个数字和比这个数字小1和比这个数字大1的所有数字

例如选择2,那么现在所有的1,2,3都被删除了,并且点数是2
在这里插入图片描述
例如再选择5,那么点数是所有5集合,并且删除4和5
在这里插入图片描述
再选择8,所有的数字都被删除完了,得到点数为25
在这里插入图片描述
因此可以发现,这道题的整体思路就是,保证选中的点删除后能够得到的点数比选择其相邻数字删除后能得到的点数大。而之前博客中讲到打家劫舍问题,与之类似
打家劫舍问题blog
打家劫舍中也是获取到最大的点数,不能偷取数组相邻两个位置,而这道题中是相邻的两个数字不能同时获取点数。因此,我们只需要创建一个arr数组,让arr数组的下标和nums数组中的数字对应,而arr数组中存储当前下标对应的数字的点数总和

例如nums数组中有三个5,那么arr[5] = 15

接着,只需要用打家劫舍问题的解决思路就可以解决这道问题了

完整代码

class Solution {
    public int deleteAndEarn(int[] nums) {
        int[] arr = new int[10001];
        for (int i = 0; i < nums.length; i++){
            arr[nums[i]] += nums[i];
        }
        int[] dp = new int[arr.length];
        dp[0] = arr[0];
        dp[1] = Math.max(arr[0], arr[1]);
        for (int i = 2; i < dp.length; i++){
            dp[i] = Math.max(dp[i - 1], dp[i - 2] + arr[i]);
        }
        return dp[dp.length - 1];
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/764833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL性能分析——执行频率、慢查询日志、profile详情

1.SQL的执行频率 2.慢查询日志 show variables like slow_query_log;修改完成以后&#xff0c;再次查询以后发现&#xff0c;slow_query_log的开关时开着的。 3.profile详情

BGP实验--联邦

1&#xff0c;AS1存在两个环回&#xff0c;一个地址为192.168.1.0/24 该地址不嫩在任何协议中宣告 AS3中存在两个环回&#xff0c;一个地址为192.168.2.0/24该地址不能再任何协议中宣告&#xff0c;最终要求这两个环回可用互相通讯 AS1中的另一个环回为10.0.0.0 24&#…

在 Linux 系统上下载 Android SDK

使用ubuntu系统进行车机开发&#xff0c;今天开始配置环境&#xff0c;首先是下载android studio&#xff0c;然后下载android sdk&#xff0c;这里需要注意的是linux系统不能使用windows系统下的Android sdk&#xff0c;亲测会出现各种问题。 常规思路&#xff0c;下载sdk&am…

【前端知识】JavaScript——<script>的8个属性

【前端知识】JavaScript——<script>的8个属性 <script>元素的8个属性&#xff1a; 属性释义async表示应该立即开始下载脚本&#xff0c;但不能阻止其他页面动作&#xff0c;比如下载资源或等待其他脚本加载。只对外部脚本文件有效。charset使用 src 属性指定的代…

力扣 134. 加油站

题目来源&#xff1a;https://leetcode.cn/problems/gas-station/description/ C题解1&#xff1a; 感觉也属于暴力&#xff0c;有一点点简化。在汽油获得总量小于消耗总量时直接返回-1&#xff0c;对于出发的加油站编号&#xff0c;其当前站的汽油净获得量一定大于等于0&#…

【严重】Grafana Azure AD环境身份认证绕过漏洞

漏洞描述 Grafana 是一个跨平台、开源的数据可视化网络应用平台。Azure AD 是由微软提供的一种云身份验证和访问管理服务。 在 Azure AD 中&#xff0c;多个用户可以拥有相同的电子邮件地址。攻击者可以创建一个与目标 Grafana 账户相同的电子邮件地址的恶意帐户&#xff0c;并…

Java IO流的使用

IO流概述 Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。一个流可以理解为一个数据的序列。输入流表示从一个源读取数据&#xff0c;输出流表示向一个目标写数据。 Java.io 包中的流支持很多种格式&#xff0c;比如&#xff1a;基本…

SQLite数据库介绍以及安装

SQLite简介 轻量化&#xff0c;易用的嵌入式数据库&#xff0c;用于设备端的数据管理&#xff0c;可以理解成单点的数据库。传统服务器型数据 库用于管理多端设备&#xff0c;更加复杂 SQLite是一个无服务器的数据库&#xff0c;是自包含的。这也称为嵌入式数据库&#xff0c…

栈--C语言实现数据结构

本期带大家一起用C语言实现栈&#x1f308;&#x1f308;&#x1f308; 一、栈的概念&#x1f30e; 栈是一种常见的数据结构&#xff0c;它遵循后进先出&#xff08;Last In, First Out&#xff09;的原则。可以将其类比为现实生活中的一摞书或者一叠盘子。 栈由一个连续的内…

前端:运用html+css+js模仿京东上商品图片区域放大特效

前端:运用htmlcssjs模仿京东上商品图片区域放大特效 1. 前言2. 前端界面3. js实现鼠标移入效果4. 实现代码 1. 前言 最近在网页端浏览京东上的商品时&#xff0c;觉得上面的那张gif图片上实现的特效不错&#xff0c;于是自己打算使用htmlcssjs技术来实现一下上述特效效果&#…

【Ceph】Ceph集群应用详解

Ceph集群应用详解 1. 资源池Pool管理1.1 查看Pool集群信息的三种方式1.2 删除Pool资源池 2.创建CephFS文件系统MDS接口2.1 创建cephfs2.2 基于内核的客户端挂载2.3 基于fuse工具方式的客户端挂载 3.创建Ceph块存储系统RBD接口3.1 删除镜像3.2 还原镜像3.3 在线扩容3.4 回滚镜像…

flutter开发实战-卡片翻转动画效果Transform+IndexedStack+rotateAnimation

flutter开发实战-实现卡片翻转动画效果 之前开发中遇到了商品卡片翻转&#xff0c;商品正面是商品图片、商品名称&#xff1b;背面是商品价格&#xff0c;需要做卡片翻转动画。 动画实现即&#xff1a;在一段时间内&#xff0c;快速地多次改变UI外观&#xff1b;由于人眼会产生…

Ext JS中定义和使用类Ext JS风格的html 按钮

Ext JS 的按钮样式如下: 按钮的背景色默认为应用的主色调或是灰色系, 也可以通过样式设置按钮的背景色, 详细可以参考: Ext JS 如何设置工具栏按钮和一般按钮保持统一样式 但是, 在实际开发的场景中有可能某些按钮是不能通过Ext JS的Button 类进行创建的, 但是页面效果…

第三章:内存管理——C++的内存管理方式

系列文章目录 文章目录 系列文章目录前言C/C内存分布C语言中动态内存管理方式面试题 C内存管理模式new/delete操作内置类型new和delete操作自定义类型 operator new与operator delete函数new和delete的实现原理内置类型自定义类型 定位new表达式(placement-new)常见面试题mallo…

JDBC 驱动程序类型

什么是JDBC驱动程序&#xff1f; JDBC驱动程序在JDBC API中实现了已定义的接口&#xff0c;用于与数据库服务器进行交互。 例如&#xff0c;使用JDBC驱动程序&#xff0c;您可以通过发送SQL或数据库命令&#xff0c;然后使用Java接收结果来打开数据库连接并与其进行交互。 J…

el-date-picker 宽度溢出浏览器问题

原文链接&#xff1a; el-date-picker 宽度溢出浏览器问题 问题由来 <el-date-picker v-model"Time" type"datetimerange"range-separator"至"start-placeholder"年/月/日 时:分:秒"end-placeholder"年/月/日 时:分:秒"…

通过迁移加速计划迁移到亚马逊云科技

公司出于许多不同的原因迁移到云。也许他们需要关闭一个老化的数据中心。或者&#xff0c;他们正在寻找太昂贵或太难在内部构建和维护的新功能。无论出于何种原因&#xff0c;在开始规划迁移之前&#xff0c;他们还有另一个问题需要回答&#xff1a;哪种云服务适合他们的需求&a…

基于互一致性学习的半监督医学图像分割

文章目录 Mutual Consistency Learning for Semi-supervised Medical Image Segmentation摘要本文方法实验结果 Mutual Consistency Learning for Semi-supervised Medical Image Segmentation 摘要 提出了一种新的互一致性网络(MC-Net)来有效地利用未标记数据进行半监督医学…

修复git diff正文中文乱码

Linux git diff正文中文乱码 在命令行下输入以下命令&#xff1a; $ git config --global core.quotepath false # 显示 status 编码 $ git config --global gui.encoding utf-8 # 图形界面编码 $ git config --global i18n.commit.encoding utf-8 # …

安装linux子系统时,出现的问题

目录 一、事故原因&#xff1a;适配linux子系统问题 二、事故问题&#xff1a;wsl版本问题 一、事故原因&#xff1a;适配linux子系统问题 事故全文&#xff1a; Installing, this may take a few minutes... WslRegisterDistribution failed with error: 0x8007019e Err…