动态规划 - 740. 删除并获得点数(C#和C实现)

动态规划 - 740. 删除并获得点数(C#和C实现)

题目描述

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

每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除每个等于 nums[i] - 1nums[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 个点数,接着要删除两个 24。
之后,删除 3 来获得 3 个点数。总共获得 9 个点数。

提示:

  • 1 <= nums.length <= 2 * 10^4
  • 2 * 10^4 <= nums[i] <= 10^4

解题思路

动态规划
  1. 定义状态:dp[i] 表示考虑前 i 个元素(从 0 到 i-1),所能获得的最大点数。
  2. 状态转移方程: dp[i] = max(dp[i-1], dp[i-2] + count[i]),即考虑第 i 个元素时,最大点数等于不考虑第 i 个元素时的最大点数和考虑第 i 个元素时的最大点数之间的较大值,其中 count[i] 表示元素 i 的数量乘以 i 的值。
  3. 初始状态: dp[0] = 0dp[1] = count[1] * 1
  4. 遍历顺序: 从小到大遍历,计算每个元素的最大点数。

C#代码实现

public int DeleteAndEarn(int[] nums) {if (nums == null || nums.Length == 0) {return 0;}int maxVal = nums.Max();int[] count = new int[maxVal + 1];foreach (int num in nums) {count[num]++;}int[] dp = new int[maxVal + 1];dp[1] = count[1] * 1;for (int i = 2; i <= maxVal; i++) {dp[i] = Math.Max(dp[i - 1], dp[i - 2] + count[i] * i);}return dp[maxVal];
}

C代码实现

int deleteAndEarn(int* nums, int numsSize) {if (nums == NULL || numsSize == 0) {return 0;}int maxVal = nums[0];for (int i = 0; i < numsSize; i++) {maxVal = fmax(maxVal, nums[i]);}int* count = (int*)malloc(sizeof(int) * (maxVal + 1));memset(count, 0, sizeof(int) * (maxVal + 1));for (int i = 0; i < numsSize; i++) {count[nums[i]]++;}int* dp = (int*)malloc(sizeof(int) * (maxVal + 1));dp[0] = 0;dp[1] = count[1] * 1;for (int i = 2; i <= maxVal; i++) {dp[i] = fmax(dp[i - 1], dp[i - 2] + count[i] * i);}int result = dp[maxVal];free(count);free(dp);return result;
}

时间复杂度和空间复杂度

  • 时间复杂度:O(N + M),其中 N 是数组的长度,M 是数组中的元素值的范围。需要遍历数组并统计每个元素的数量,同时需要计算每个元素值的最大点数。
  • 空间复杂度:O(M),其中 M 是数组中的元素值的范围。使用了一个大小为 M+1 的数组来保存每个元素的数量和最大点数。

参与点评

读者朋友们,如果您在阅读过程中,对文章的质量、易理解性有任何建议,欢迎在评论区指出,我会认真改进。

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

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

相关文章

驭见大模型 智领新征程丨泰迪智能科技荣登2023年度广东省人工智能应用项目风云榜

12月15日&#xff0c;由广东省科学技术厅、广东省工业和信息化厅、广东省人力资源和社会保障厅、广东省政务服务数据管理局、广东省科学技术协会指导&#xff0c;广东省人工智能产业协会主办的2023年粤港澳大湾区人工智能产业大会正式举办&#xff0c;大会以“驭见大模型、智领…

静态独享专线IP怎么设置?使用静态IP怎么上网

随着互联网的普及和发展&#xff0c;越来越多的人开始使用电脑上网。在上网的过程中&#xff0c;IP地址是每个设备与互联网连接的唯一标识。而静态IP地址则是指固定不变的IP地址&#xff0c;它可以让您的电脑在每次连接互联网时都能够获得相同的IP地址&#xff0c;这对于一些需…

PTFE四氟托盘应用于化工、医药、食品行业

PTFE托盘是一种广泛应用于化工、医药、食品等行业的特种托盘&#xff0c;采用聚四氟乙烯&#xff08;PTFE&#xff09;材料制造而成。PTFE是一种具有出色耐腐蚀性、高温稳定性和优异物理特性的材料。 PTFE托盘在化工领域中被广泛应用&#xff0c;主要用于处理腐蚀性的化学物质。…

【leetcode876】链表的中间结点Java代码讲解

12.19 链表的中间结点 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5] 解释&#xff1a;链表只有一个中间结点&a…

工作纪实38-排查cpu彪高

昨天晚上上线了一个服务&#xff0c;第二天发现CPU持续飙高到70&#xff5e;90%&#xff0c;触发平台的自动扩容&#xff0c;后定位出问题后降低到3% 怀疑部分代码使用的线程在持续工作没有释放&#xff08;死循环&#xff09;进入机器&#xff0c;使用top -H 找出系统中使用C…

接口自动化测试难点:数据库验证解决方案

接口自动化中的数据库验证&#xff1a;确保数据的一致性和准确性 接口自动化测试是现代软件开发中不可或缺的一环&#xff0c;而数据库验证则是确保接口返回数据与数据库中的数据一致性的重要步骤。本文将介绍接口自动化中的数据库验证的原理、步骤以及示例代码&#xff0c;帮…

机器学习 | 贝叶斯方法

不同于KNN最近邻算法的空间思维&#xff0c;线性算法的线性思维&#xff0c;决策树算法的树状思维&#xff0c;神经网络的网状思维&#xff0c;SVM的升维思维。 贝叶斯方法强调的是 先后的因果思维。 监督式模型分为判别式模型和生成式模型。 判别模型和生成模型的区别&#xf…

【LeetCode刷题-树】--257.二叉树的所有路径

257.二叉树的所有路径 方法&#xff1a;深度优先搜索 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, T…

win环境下启动kafka Port already in use: 6688; nested exception is

背景 zk启动成功后&#xff0c;接下来启动kafka&#xff0c;再启动kafka后一直说端口被占用。 端口占用解决办法: netstat -aon|findstr 9092 taskkill -f -pid 7780 杀掉后&#xff0c;再次启动kafka时&#xff0c;问题并未解决 后来修改了批处理文件kafka-run-class.bat中…

深度剖析知识图谱:方法、工具与实战案例

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 知识图谱作为一种强大的知识表示和关联技术&am…

SAP 特殊采购类80简介

前面我们已经测试特殊采购类40、70,我们今天测试一下特殊采购类80。 特殊采购类80:在替代工厂生产,在成品层维护特殊采购类,需求和收货在计划工厂完成,成品生产和组件采购在生产工厂完成。 80采购类也是我们在SAP系统中实现跨工厂需求传递的一种方式。它具有传递方式简单、…

Python tkinter控件全集之组合选择框 ttk.ComboBox

Tkinter标准库 Tkinter是Python的标准GUI库&#xff0c;也是最常用的Python GUI库之一&#xff0c;提供了丰富的组件和功能&#xff0c;包括窗口、按钮、标签、文本框、列表框、滚动条、画布、菜单等&#xff0c;方便开发者进行图形界面的开发。Tkinter库基于Tk for Unix/Wind…

Sui限定版冬季任务来袭,100万份礼物和50万SUI在等你!

在这个渐趋寒冷但节日氛围却日渐浓厚的冬日&#xff0c;Mysten Labs非常高兴地向大家宣布&#xff0c;限定版冬季任务已于北京时间12月19日凌晨3点正式启动啦&#xff01;这次冒险任务充满刺激&#xff0c;奖励丰厚&#xff0c;快来Mysten Labs任务网站体验吧&#xff01; 对于…

查看git的帮助信息

说明 在cmd窗口、或者git Bash shell下执行git --help或者git -h命令&#xff0c;可以查看git的帮助信息。 执行git <command> --help命令可以查看某个命令的帮助信息&#xff0c;其中<command>表示某个具体的命令。 示例1&#xff1a;在git Bash shell下运行git…

Linux文本三剑客grep练习

1、显示/etc/rc.d/rc.sysinit文件中以不区分大小的h开头的行&#xff1b; [rootshell ~]# grep "^[hH]" /etc/rc.d/rc.rc.sysinit [rootshell ~]# grep -i "h" /etc/rc.d/rc.sysinit 2、显示/etc/passwd中以sh结尾的行; [rootshell ~]# grep "sh$&quo…

数据结构与算法:编程世界的基石

文章目录 &#x1f330;数据结构&#xff1a;程序的骨架&#x1f344;数组&#x1f344;链表&#x1f344;栈和队列&#x1f344;树和图 &#x1f330;算法&#xff1a;问题的解决方案&#x1f344;排序算法&#x1f344;搜索算法&#x1f344;动态规划 &#x1f330;数据结构与…

windows10 固定电脑IP地址操作说明

windows10 固定电脑IP地址操作说明 一、无线网络的IP地址设置方法二、有线网络的IP地址设置方法 本文主要介绍&#xff0c;windows10操作系统下&#xff0c;不同的网络类型&#xff0c;对应的电脑IP地址设置方法。 一、无线网络的IP地址设置方法 在桌面右下角&#xff0c;点击…

A01、深入了解性能优化

1、常用性能评价/测试指标 1.1、响应时间 提交请求和返回该请求的响应时间之间使用的时间&#xff0c;一般比较关注平均响应时间。常用操作的响应时间列表&#xff1a; 操作响应时间打开一个站点几秒数据库查询一条记录&#xff08;有索引&#xff09;十几毫秒机械磁盘一次寻…

自动驾驶多传感器融合学习笔记

目录 BevFusion liar&#xff0c;radar&#xff1a; BevFusion BevFusion是一种多传感器融合技术&#xff0c;它可以将来自不同传感器&#xff08;如LiDAR和相机&#xff09;的数据融合到一个统一的BEV表示中。BevFusion的优点在于它能够结合多种传感器的优点&#xff0c;从…

2023年超声波清洗机实测!清洁力强的超声波清洗机到底如何选择?

超声波清洗机对眼镜党来说是再熟悉不过的一款清洁设备&#xff0c;每次眼镜只要脏了就会第一时间想到拿去眼镜店去清洗&#xff0c;眼镜店老板数分钟就给自己解决了&#xff0c;不需要自己动手去清洗。随着科技的发展&#xff0c;超声波清洗机已经开始慢慢衍生到家里也能看到它…