算法每日一练 (18)

💢欢迎来到张翊尘的技术站
💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥

文章目录

  • 算法每日一练 (18)
    • 删除并获得点数
      • 题目描述
      • 解题思路
      • 解题代码
        • `c/c++`
        • `golang`
        • `lua`

官方站点: 力扣 Leetcode

算法每日一练 (18)

删除并获得点数

题目地址:删除并获得点数

题目描述

给你一个整数数组 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 个点数,接着要删除两个 2 和 4 。
之后,再次删除 3 获得 3 个点数,再次删除 3 获得 3 个点数。
总共获得 9 个点数。

提示:

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

解题思路

  • 首先根据题意判断边界条件,当集合 nums 中元素数量为 1 时直接返回首个元素的值即可。

  • 然后获取数组中的最大值,创建辅助数组 count 来统计每个数字的总点数。其中 count[i] 表示 i 数字出现的点数之和。

  • count 集合中的元素个数小于 3 个时,表示源数组中不相同的元素个数不超过 2 个,故直接返回 count[1] 即可。

  • 创建 dp 数组,初始化 dp[1]dp[2]

    • dp[1] = count[1]:因为 count[0] 永远等于 0 所以直接取 count[1] 即可。
    • dp[2] = max(count[1], count[2]):因为 count[1]count[2] 只能选择删除其中一个,故选择其中最大的一个。
  • 借助 for 循环从 3 开始到 maxVal,满足如下状态转移方程:

    d p [ i ] = m a x ( d p [ i − 1 ] , d p [ i − 2 ] + c o u n t [ i ] ) dp[i] = max(dp[i - 1], dp[i - 2] + count[i]) dp[i]=max(dp[i1],dp[i2]+count[i])

    • 如果选择删除 i,则不能选择删除 i-1i+1,故 dp[i] 的值就是 dp[i-2] + count[i]
    • 如果不选择删除 i,则可以删除 i-1,故 dp[i] 的值就是 dp[i-1]
    • 两者取其中最大值就是 dp[i] 的状态值。
  • 最终返回 dp[maxVal] 的值即可。

解题代码

c/c++
#include <vector>class Solution
{
public:int deleteAndEarn(std::vector<int> &nums){int sz = nums.size();if (sz == 1)return nums[0];int maxVal = nums[0];for (int i = 1; i < sz; i++){if (nums[i] > maxVal)maxVal = nums[i];}std::vector<int> count(maxVal + 1, 0);for (auto &e : nums){count[e] += e;}if (count.size() < 3)return count[1];std::vector<int> dp(maxVal + 1, 0);dp[1] = count[1];dp[2] = std::max(count[1], count[2]);for (int i = 3; i <= maxVal; i++){dp[i] = std::max(dp[i - 1], dp[i - 2] + count[i]);}return dp[maxVal];}
};
golang
func deleteAndEarn(nums []int) int {sz := len(nums)if sz == 1 {return nums[0]}maxVal := nums[0]for i := 1; i < sz; i++ {if nums[i] > maxVal {maxVal = nums[i]}}count := make([]int, maxVal+1)for _, num := range nums {count[num] += num}if len(count) < 3 {return count[1]}dp := make([]int, maxVal+1)dp[1] = count[1]dp[2] = max(count[1], count[2])for i := 3; i <= maxVal; i++ {dp[i] = max(dp[i-1], dp[i-2]+count[i])}return dp[maxVal]
}
lua
local function deleteAndEarn(nums)local sz = #numsif sz == 1 thenreturn nums[1]endlocal maxVal = nums[1]for i = 2, sz doif nums[i] > maxVal thenmaxVal = nums[i]endendlocal count = {}for i = 1, maxVal docount[i] = 0endfor i, v in ipairs(nums) doif v == 0 thengoto continueelsecount[v] = count[v] + vend::continue::endif #count == 1 thenreturn count[1]endlocal dp = {}dp[1] = count[1]dp[2] = math.max(count[1], count[2])for i = 3, maxVal dodp[i] = math.max(dp[i - 1], dp[i - 2] + count[i])endreturn dp[maxVal]
end

🌺🌺🌺撒花!

如果本文对你有帮助,就点关注或者留个👍
如果您有任何技术问题或者需要更多其他的内容,请随时向我提问。

在这里插入图片描述

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

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

相关文章

Java后端API限流秘籍:高并发的防护伞与实战指南

目录导航 📜 🛡️ 为什么需要API限流?🧠 主流限流算法大解析👩‍💻 阿里巴巴的限流实践📏 四大黄金定律🤼 限流策略组合拳🏆 限流场景实战💻 技术实现方案🌟 最佳实践分享📈 结语与展望📚 推荐阅读 1. 🛡️ 为什么需要API限流? 在高并发环境中,未…

【软件测试】:软件测试实战

1. ⾃动化实施步骤 1.1 编写web测试⽤例 1.2 ⾃动化测试脚本开发 common public class AutotestUtils {public static EdgeDriver driver;// 创建驱动对象public static EdgeDriver createDriver(){// 驱动对象已经创建好了 / 没有创建if( driver null){driver new EdgeDr…

26考研——栈、队列和数组_栈(3)

408答疑 文章目录 一、栈1、栈&#xff08;Stack&#xff09;的概念和特点定义术语操作特性示例直观理解栈的基本操作初始化栈判断栈是否为空入栈操作出栈操作读取栈顶元素销毁栈 栈的数学性质 2、栈的顺序存储结构顺序栈的定义栈顶指针初始化注意事项 共享栈共享栈的操作共享栈…

基于Spring Boot的ONLY在线商城系统设计与实现的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

信息安全的数学本质与工程实践

信息安全的本质是数学理论与工程实践的高度统一。在这个数字空间与物理世界深度融合的时代&#xff0c;信息安全已从简单的数据保护演变为维系数字社会正常运转的基础设施。对于计算机专业学习者而言&#xff0c;理解信息安全需要超越工具化认知&#xff0c;深入其数学内核与系…

网站迁移监测体系:301重定向与流量波动预警机制

网站迁移监测体系&#xff1a;301重定向与流量波动预警机制 引言 在网站迁移过程中&#xff0c;确保用户体验的连续性和搜索引擎优化&#xff08;SEO&#xff09;的稳定性是至关重要的。301重定向作为一种永久性重定向技术&#xff0c;能够有效地将旧页面的权重和流量传递到新…

自动驾驶VLA模型技术解析与模型设计

1.前言 2025年被称为“VLA上车元年”&#xff0c;以视觉语言动作模型&#xff08;Vision-Language-Action Model, VLA&#xff09;为核心的技术范式正在重塑智能驾驶行业。VLA不仅融合了视觉语言模型&#xff08;VLM&#xff09;的感知能力和端到端模型的决策能力&#xff0c;…

OpenEuler linux samba部分目录无法访问的问题

ubuntu上没遇到过这个问题 换成openeuler这个系统后 出现 安装samba之后 部分目录无法访问的问题 vi /etc/selinux/config SELINUXenforcing&#xff0c;改为SELINUXpermissive。 改完之后重启 就可以了

游戏引擎学习第184天

"我们有所有的代码"α 我们将进行一个完整的游戏开发过程&#xff0c;并且会展示。我们从零开始编写引擎&#xff0c;所以我们涵盖的内容从最底层的代码到最高层次的模块都有。虽然我们不能说是“高层次high level”的内容&#xff0c;但我们确实拥有所有的代码&…

基于javaweb的SpringBoot雪具商城系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

vue数字公式篇 Tinymce结合使用(二)

继上一篇的数字公式 &#xff0c; 这次的功能是将公式能插入编辑器以及修改 1、Tinymce 自定义 LateX 按钮&#xff0c;打开公式编辑器窗口 LateX.vue window.tinymce.init({...//基础配置这里我就不写了setup(ed) {//自定义 LateX 按钮ed.ui.registry.addButton(LateX, {text:…

香蕉派 BPI-CM6 工业级核心板采用进迭时空K1 8核 RISC-V 芯片开发

BPI-CM6 产品介绍 香蕉派BPI-CM6是一款工业级RISC-V核心板&#xff0c;它采用SpacemiT K1 8核RISC-V芯片设计&#xff0c;CPU集成2.0 TOPs AI计算能力。8/16G DDR和8/16/32/128G eMMC。设计了板对板连接器&#xff0c;以增强稳定性&#xff0c;与树莓派CM4尺寸相同&#xff0c…

SpringBoot大学生竞赛管理系统设计与实现

一个用于管理大学生竞赛报名、信息查询与竞赛管理的系统&#xff0c;采用了现代化的SpringBoot框架进行开发。该系统的主要功能包括学生信息管理、教师信息管理、竞赛报名审核、竞赛信息管理等模块&#xff0c;适用于学校或教育机构进行竞赛活动的组织与管理。系统界面简洁&…

使用ucharts写的小程序,然后让圆环中间的空白位置变大

将ringWidth属性调小 extra: { ring: { ringWidth: 20, activeOpacity: 1.5, activeRadius: 10, offsetAngle: 0, labelWidth: 15, border: true, borderWidth: 0, borderColor: #F…

【MySQL】用户账户、角色、口令、PAM

目录 查看用户账户设置 连接 1.本地连接 2.远程连接 账户 角色 操作用户账户和角色 配置口令和账户有效期限 手工使口令过期 配置口令有效期限 PAM身份验证插件 客户端连接&#xff1a;使用 PAM 账户登录 在连接到MySQL服务器并执行查询时&#xff0c;会验证你的身…

力扣:回溯算法

组合I class Solution {List<List<Integer>> result new ArrayList(); // 所有结果集List<Integer> list new ArrayList(); // 当前结果集public List<List<Integer>> combine(int n, int k) {dfs(n, k, 1);return result;}public void dfs(i…

论坛系统测试报告

一、项目背景 为论坛系统项目设计并进行自动化测试。论坛系统由六个页面构成&#xff1a;用户登录页、用户注册页、个人中心页面、我的帖子页面、帖子编辑页、帖子列表页以及帖子详情页。 通过使用selenium工具来定位到web中的元素&#xff0c;对获取到的元素进行自动化测试等操…

husky的简介以及如果想要放飞自我的解决方案

husky 是一个 Git Hooks 管理工具&#xff0c;它的主要作用是 在 Git 提交&#xff08;commit&#xff09;、推送&#xff08;push&#xff09;等操作时执行自定义脚本&#xff0c;比如代码检查&#xff08;Lint&#xff09;、单元测试&#xff08;Test&#xff09;、格式化代码…

微信小程序pdf预览

1.示例图 2.代码 fileId&#xff1a;要预览的pdf文件的id viewsFiles(fileId) {wx.showLoading({title: 加载中...});var params {url: "/common/getFile/" fileId ,//后端提供的接口method: "GET",responseType: "arraybuffer",callBack: …

SpringCloud Stream:消息驱动的微服务架构设计

文章目录 引言一、Spring Cloud Stream基础概念二、核心组件和架构三、消息生产者实现四、消息消费者实现五、消息分组与持久化六、消息分区与扩展七、函数式编程模型八、错误处理与重试机制九、测试与监控总结 引言 在当今复杂的分布式系统环境中&#xff0c;微服务架构已经成…