Leetcode 3181. Maximum Total Reward Using Operations II

  • Leetcode 3181. Maximum Total Reward Using Operations II
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3181. Maximum Total Reward Using Operations II

1. 解题思路

这一题的话思路上依然还是动态规划的思路,核心的迭代关系式如下:

def dp(idx, pre_sum) :if nums[idx] <= pre_sum:return dp(idx+1, pre_sum)else:return max(dp(idx+1, pre_sum), dp(idx+1, nums[idx] + pre_sum))

当然,直接这么实现的话还是会遇到内存爆炸的问题,因此我们需要进一步对这个递推式进行拉平,具体来说就是实现存储下来pre_num,然后每次进行一次for循环遍历,在目标区间内更新取到每一个idx上的值的情况下pre_num的变化。

但是这样的话依然遇到了超时的问题。

后来看了一下别人的解答之后发现,他们的思路很多也差不多是这样,但是做了一些剪枝,具体来说,如果存在两个不同的数相加能够获得max(nums)-1,那么最优解必为2*max(nums)-1,这个用归纳法稍微想想就行了。

2. 代码实现

给出最终的python代码实现如下:

class Solution:def maxTotalReward(self, rewardValues: List[int]) -> int:rewardValues = sorted(set(rewardValues))prev = [0]unseen = [i+1 for i in range(max(rewardValues))]def in_sorted_list(nums, val):idx = bisect.bisect_left(nums, val)return idx if idx <= len(nums) and nums[idx] == val else -1ans = 0for reward in rewardValues:if reward != rewardValues[-1] - reward-1 and in_sorted_list(rewardValues, rewardValues[-1] - reward-1) != -1:return 2*rewardValues[-1]-1idx = bisect.bisect_left(prev, reward)-1ans = max(ans, reward + prev[idx])i = bisect.bisect_left(unseen, reward)while i < len(unseen):if unseen[i] >= 2 * reward:breakk = in_sorted_list(prev, unseen[i]-reward)if k == -1:i += 1else:bisect.insort(prev, unseen[i])unseen.pop(i)return ans

提交代码评测得到:耗时716ms,占用内存25.1MB。

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

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

相关文章

Python的return和yield,哪个是你的菜?

目录 1、return基础介绍 &#x1f4da; 1.1 return用途&#xff1a;数据返回 1.2 return执行&#xff1a;函数终止 1.3 return深入&#xff1a;无返回值情况 2、yield核心概念 &#x1f347; 2.1 yield与迭代器 2.2 生成器函数构建 2.3 yield的暂停与续行特性 3、retur…

关于使用spring boot自带的jackson解析xml心得

一、声明版本依赖 项目负责版本管理的pom依赖如下声明引用 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version><relativePath/></parent…

react+wijmo所遇问题

1.官网地址&#xff1a;https://demo.mescius/wijmo/demos/Grid/Overview/react 别进中文地址&#xff0c;注意后缀mescius有没有.cn有的话删掉&#xff0c;那个没有触发方法和各类API&#xff0c;组件也不全 2.中文地址&#xff1a;&#xff08;不太好用&#xff09;&#x…

Flask-REXTx 学习笔记——1.响应编组(Response marshalling)

记录对Flask-REXTx的学习笔记 简介 Flask-RESTx是一个基于Flask的扩展&#xff0c;它提供了一些额外的功能来帮助开发人员更轻松地构建强大的RESTful API。这些功能包括API文档的自动生成、请求参数解析和API资源管理等。Flask-RESTx的目标是在维护API时能够提供更好的文档和…

MFC 教程-回车时窗口退出问题

【问题描述】 MFC窗口默认时&#xff0c;按回车窗口会退出 【原因分析】 默认调用OnOK() 【解决办法】 重写虚函PreTranslateMessage BOOL CTESTMFCDlg::PreTranslateMessage(MSG* pMsg) {// TODO: 在此添加专用代码和/或调用基类// 修改回车键的操作反应 if (pMsg->…

C++11新特性【上】(统一的列表初始化、auto、decltype、右值引用、万能引用、完美转发)

一、C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了 C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞 进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性的把两个标准合…

Web前端中级探索:技术进阶与困惑之旅

Web前端中级探索&#xff1a;技术进阶与困惑之旅 在Web开发领域&#xff0c;前端技术扮演着至关重要的角色。对于中级前端开发者而言&#xff0c;这是一个既充满挑战又充满机遇的阶段。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;深入探讨Web前端中级阶段的技…

高德地图简单实现点标,和区域绘制

高德地图开发文档:https://lbs.amap.com/api/javascript-api/guide/abc/quickstart 百度搜索高德地图开发平台 注册高德地图开发账号 在应用管理中 我的应用中 添加一个Key 点击提交 进入高德地图开发文档:https://lbs.amap.com/api/javascript-api/guide/abc/quickstart …

Mysql 的分布式策略

1. 前言 MySQL 作为最最常用的数据库&#xff0c;了解 Mysql 的分布式策略对于掌握 MySQL 的高性能使用方法和更安全的储存方式有非常重要的作用。 它同时也是面试中最最常问的考点&#xff0c;我们这里就简单总结下 Mysq 的常用分布式策略。 2. 复制 复制主要有主主复制和…

使用 C# 学习面向对象编程:第 2 部分

C# 类属性简介 属性在面向对象编程中起着至关重要的作用。它们允许我们从类外部访问类的私有变量。在类中使用私有变量是很好的。属性看起来像变量和方法的组合。属性有部分&#xff1a;“get 和 set”方法。get 方法应该返回变量&#xff0c;而 set 方法应该为其赋值。 步骤…

Chat-TTS:windows本地部署实践【有手就行】

最近Chat-TTS模型很火&#xff0c;生成的语音以假乱真&#xff0c;几乎听不出AI的味道。我自己在本地部署玩了一下&#xff0c;记录一下其中遇到的问题。 环境&#xff1a; 系统&#xff1a;windows 11 GPU&#xff1a; Nvidia 4060 Cuda&#xff1a;12.1&#xff08;建议安…

【前端】详解JavaScript事件代理(事件委托)

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

3 数据类型、运算符与表达式-3.3.2 整型变量(原码,反码,补码)

在计算机科学中&#xff0c;补码、原码和反码是用来表示带符号整数的二进制编码方法&#xff0c;特别是在计算机内存中存储和处理整数时。这些编码方式帮助计算机区分正数和负数&#xff0c;并支持算术运算。以下是它们的具体含义&#xff1a; 原码&#xff08;True Form or S…

【OC】类与对象

类与对象 定义类接口部分定义成员变量方法说明实现部分 对象的产生与使用对象与指针self关键字避免重复创建 id类型方法详解方法的所属性形参个数可变的方法 成员变量成员变量及其运行机制多个实例中内存示意图模拟类变量单例模式 类是面向对象的重要内容&#xff0c;我们可以把…

JS中一个dom元素能绑定多少事件

在JavaScript中&#xff0c;一个DOM元素可以绑定的事件数量并没有明确的限制&#xff0c;这主要取决于浏览器的实现和内存限制。然而&#xff0c;在实际应用中&#xff0c;为同一个DOM元素绑定过多的事件监听器可能会导致性能问题&#xff0c;尤其是在事件处理函数执行复杂操作…

【系统学C++】二、从C语言到C++(二)

【系统学C】二、从C语言到C&#xff08;二&#xff09; bool 类型怎么打印 bool 类型的值 强弱类型C语言的类型系统C的类型系统总结 NULL 和 nullptrNULLnullptr示例 起别名使用 typedef使用 using 关键字&#xff08;C11及以后&#xff09;注意 void* 万能指针C语言中的 void…

46-4 等级保护 - 网络安全等级保护概述

一、网络安全等级保护概述 原文:没有网络安全就没有国家安全 二、网络安全法 - 安全立法 中华人民共和国主席令 第五十三号 《中华人民共和国网络安全法》已于2016年11月7日由中华人民共和国第十二届全国人民代表大会常务委员会第二十四次会议通过,并自2017年6月1日起正式…

Docker快速部署springboot项目

本文概述 本文主要介绍了怎么将springboot项目打包为docker镜像&#xff0c;并如何在后端服务器上使用docker快速部署springboot应用和nginx应用。 一、打包springboot项目 1、复制原来的application.yml文件然后重命名为application-pro.yml文件&#xff0c;将application-pro…

【数据结构】图之邻接矩阵代码实现与dfs、bfs

一、图的相关概念 图的相关概念包括顶点、边、有向图和无向图等。图是计算机科学中一个核心的数据结构&#xff0c;用于描述对象之间的关系。它由顶点&#xff08;节点&#xff09;的集合和连接这些顶点的边的集合组成。具体分析如下&#xff1a; 顶点&#xff1a;图中的基本构…

linux 关于jq的安装和使用

文章目录 前言 一、jq是什么&#xff1f; 二、安装方法 1.在线安装 2.离线安装 三、使用方法 1. 读取json字符串并解析 2.读取json文件并解析 3.遍历json数组&#xff0c;查询姓名为Bob学生的年龄 总结 前言 今天要写一个自定义的脚本&#xff0c;涉及到对json数据的解…