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

news2024/11/23 8:18:09

题目来源:删除并获得点数

题目分析

题目分析:

从题目中可以获取到的条件是,如果选择了i位置,那么就必须删除与i-1和i+1的位置的值相同的所有的值。

既然要删除相同的值,那么我们可以想,要不要先排序,将相同的值都放到一起,好操作!而我们又可以想,既然要删除所有相同的值的元素,那不入干脆求了和,再放入数组中。

那怎么放入呢?既然用到数组了,那么将数组利用好,我们可以使用数组下标来操作,0位置对应0元素,1位置对应1,将所有1全部加起来,再放到1位置上,于此类推!

 于是,我们就可以将问题转化了!转化成类似“打家劫舍”这道题目了!题目讲解:

这里简单说一下,我们把问题转化成了求数组中的最大和,但是,当选择了i位置的元素,那么i-1和i+1位置的元素就不能选择了,需要跳开一个来选择。

状态表示

f[i]表示到达 i 这个位置,选择值为 i 的元素。

g[i]表示,到达 i 这个位置,不选择 i 这个元素。

状态转移方程

f[i] = g[i-1] + nums[i];
g[i-1] = (f[i-1],g[i-1]);

初始化

从状态转移方程中可以知道,我们需要从i =1出发,为了不越界,需要将i==0这个位置初始化。因为f[i]是选择的,那么将f[0] = nums[0],g[i]不选择,则g[0] = 0;

方向是从左到右开始计算结果。

返回值

在到达最后的位置,有两种选择,一是不选择,二是选择,因此最终结果是在这两种情况下,选择最大值的:

return max(f[n-1],g[n-1]);

编写代码 

class Solution {
public:
    int deleteAndEarn(vector<int>& nums) {
        const int N = 10001;
        int arr[N] = {0};
        for(auto x:nums)/*将i元素,求和到i位置上*/
        {
            arr[x]+=x;
        }
        vector<int> f(N);
        auto g = f;
        f[0] = arr[0];
        for(int i = 1;i<N;++i)
        {
            f[i] = g[i-1]+arr[i];
            g[i] = max(g[i-1],f[i-1]);
        }
        return max(f[N-1],g[N-1]);
    }
};

总结:

拿到题目先不急着写代码,而是先挖掘题目的条件,根据条件来解析题目,用到数组时,想一想能不能利用它的下标的映射关系等等。

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

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

相关文章

捕捉现货白银短期波动办法

有的投资者认为&#xff0c;在现货白银市场中&#xff0c;投资最适合的就是使用短线投资方法。因为短线投资可以充分发挥现货白银波动灵活的特点&#xff0c;尤其是对资金量少的投资者更是如此。确实&#xff0c;现货白银确实是比较适合进行短线投资&#xff0c;那么下面我们就…

图像检索,目标检测map的实现

一、图像检索指标Rank1,map 参考&#xff1a;https://blog.csdn.net/weixin_41427758/article/details/81188164?spm1001.2014.3001.5506 1.Rank1: rank-k&#xff1a;算法返回的排序列表中&#xff0c;前k位为存在检索目标则称为rank-k命中。 常用的为rank1&#xff1a;首…

Linux: 使用 ssh 连接其他服务器

通过ifconfig 查看要连接的服务器地址&#xff1a; ubuntuubuntu1804-0172:/media/sangfor/vdc$ ssh ubuntu192.168.11.49 输入要连接的服务器密码: ubuntua192.168.1149 s password: 连接服务器成功&#xff1a;

二、pikachu之SQL注入(2)

文章目录 1、delete注入2、http header注入3、布尔盲注4、时间盲注 4、宽字节注入 1、delete注入 &#xff08;1&#xff09;寻找传参页面&#xff0c;在删除留言的时候&#xff0c;发现是get传参&#xff1b; &#xff08;2&#xff09;判断是否存在注入点&#xff0c;命令&…

创建Ingress实例

部署deployment和service apiVersion: apps/v1 kind: Deployment metadata:creationTimestamp: nulllabels:app: webname: webnamespace: dalong spec:replicas: 2selector:matchLabels:app: webstrategy: {}template:metadata:creationTimestamp: nullspec:containers:- ima…

LabVIEW硬件在环仿真模拟电路故障分析和特征提取

LabVIEW硬件在环仿真模拟电路故障分析和特征提取 与数字电路相比&#xff0c;模拟电路故障分析是一项具有挑战性的任务。这主要是由于模拟分立元件的非线性特性&#xff0c;以及其他因素&#xff0c;包括噪声和内部可访问性的限制。参数故障和灾难性故障是模拟电路中发生的两种…

写之前的项目关于使用git remote -v 找不到项目地址的解决方案

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、报错解析1. 报错内容2. 报错翻译3. 报错解析&#xff08;1&#xff09;使用git branch来查看git仓库有几个分支&#xff08;2&#xff09;使用git remote -v&am…

Linux 发行版 Debian 宣布支持龙芯 LoongArch 架构

近期&#xff0c;龙芯发布了 3A6000 桌面处理器&#xff0c;芯片的性能又一次大幅度提升&#xff0c;成为国产芯片的又一里程碑。 同期&#xff0c;LoongArch 架构的生态建设也迅速提升&#xff0c;开源网络引导固件 iPXE、QQ Linux 版、摩尔线程等软硬件都官宣支持龙芯 Loong…

SpringBoot生成和解析二维码完整工具类分享(提供Gitee源码)

前言&#xff1a;在日常的开发工作当中可能需要实现一个二维码小功能&#xff0c;我参考了网上很多关于SpringBoot生成二维码的教程&#xff0c;最终还是自己封装了一套完整生成二维码的工具类&#xff0c;可以支持基础的黑白二维码、带颜色的二维码、带Logo的二维码、带颜色和…

【考研数学】线形代数第三章——向量 | 基本概念、向量组的相关性与线性表示

文章目录 引言一、向量的概念与运算1.1 基本概念1.2 向量运算的性质 二、向量组的相关性与线性表示2.1 理论背景2.2 相关性与线性表示基本概念2.3 向量组相关性与线性表示的性质 引言 向量是线性代数的重点和难点。向量是矩阵&#xff0c;同时矩阵又是由向量构成的&#xff0c…

从 0 到 1 读懂:哈希表

哈希表 一、什么是哈希表&#xff1f;二、两种散列函数构造方法1、直接定址法2、除留余数法&#xff08;常用&#xff09; 三、散列地址冲突四、常用冲突处理1、负载因子调节&#xff08;减少冲突概率&#xff09;2、开放定址法&#xff08;闭散列&#xff09;&#xff08;1&am…

【C++奇遇记】内存模型

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集 数据库专栏 初阶数据结构 &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如…

VB.NET通过VB6 ActiveX DLL调用PowerBasic及FreeBasic动态库

前面说的Delphi通过Activex DLL同时调用PowerBasic和FreeBasic写的DLL&#xff0c;是在WINDOWS基础平台上完成的。 而 .NET平台是架在WINDOWS基础平台之上的&#xff0c;它的上面VB.NET或C#等开发的APP程序&#xff0c;下面写一下用VB.NET&#xff0c;通过VB6注册的Activex DLL…

16.遍历二叉树,线索二叉树

目录 一. 遍历二叉树 &#xff08;1&#xff09;三种遍历方式 &#xff08;2&#xff09;递归遍历算法 &#xff08;3&#xff09;非递归遍历算法 &#xff08;4&#xff09;层次遍历算法 二. 基于递归遍历算法的二叉树有关算法 &#xff08;1&#xff09;二叉树的建立 …

小程序中的页面配置和网络数据请求

页面配置文件和常用的配置项 1.在msg.json中配置window中的颜色和背景色 "navigationBarBackgroundColor": "#efefef","navigationBarTextStyle": "black" 2.可以看到home中的没有发生变化但是msg的发生变化了&#xff0c;这个和前面的…

Mysql查询重复数据常用方法

在平常的开发工作中&#xff0c;我们经常需要查询数据&#xff0c;比如查询某个表中重复的数据&#xff0c;那么&#xff0c;具体应该怎么实现呢&#xff1f;常用的方法都有哪些呢&#xff1f; 测试表中数据&#xff1a; 1&#xff1a;查询名字重复的数据 having&#xff1a; …

面试之快速学习计算机网络-http

1. HTTP常见状态码 2. 3开头重定向&#xff0c;4开头客户端错误&#xff0c;5开头服务端错误 2. HTTP 报文 1. start-line&#xff1a;请求行&#xff0c;可以为以下两者之一&#xff1a; 请求行&#xff1a; GET /hello-world2.html HTTP/1.1状态行&#xff1a;HTTP/1.1 200…

关于模板的大致认识【C++】

文章目录 函数模板函数模板的原理函数模板的实例化模板参数的匹配原则 类模板类模板的定义格式类模板的实例化 非类型模板参数typename 与class模板的特化函数模板特化类模板特化全特化偏特化 模板的分离编译 函数模板 函数模板的原理 template <typename T> //模板参数…

el-input输入框 输入数字中文 来回切换之后 监听失效问题如何解决

实现一个vue自定义指令——输入框&#xff08;input,el-input&#xff09;输入内容类型限制&#xff0c;解决中文输入法双向绑定失效问题&#xff0c;多种类型支持&#xff0c;数字类型&#xff0c;浮点类型、英文类型、整数类型、四则运算等 直接上代码 首先新建input.js ex…

Git如何操作本地分支仓库?

基本使用TortoiseGit 操作本地仓库(分支) 分支的概念 几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来&#xff0c;避免影响开发主线。多线程开发,可以同时开启多个任务的开发&#xff0c;多个任务之间互不影响。 为何要…