【LeetCode 983】门票的最低费用 Minimum Cost For Tickets

(nice!!!)LeetCode 983. 最低票价(动态规划、递归 || 递推 || 指针) 【代码】(nice!!!)LeetCode 983. 最低票价(动态规划、递归 || 递推 || 指针) 阅读详情

题目:
在这里插入图片描述
即,给定一个数组代表你一年中的什么时候会去电影院,给定另外一个数组代表一日票,七日票,跟三十日票的金额,要求出如何买票,才能使花费最少。
在这里插入图片描述在这里插入图片描述
思路:
明显看出这个是一个动态规划的题目,因此我需要两步曲来完成,首先是状态的定义,我们发现,比如 days[1,2,3,5],我们要输出的是第5天所花费的最少金额,而且 days是严格递增的,所以我们只要求出第days[days.length - 1]的花费就OK,因此可以定义状态dp[days[days.length - 1]]。
定义好了状态,第二步就是看状态的转移方程,由于我们定义的状态是天数,我们需要做的,就是从第0天的花费,递推到第days[days.length - 1]天的花费,而对于每一天,只有两种情况:
① 这一天不去看电影,则到达这一天的花费dp[i]为:dp[i] = dp[i - 1],跟前一天的花费是相同的
② 这一天去看电影,则我们要判断这一天需要买什么票,哪种票更合适,即我们判断我们是买一日票,还是过去七天用七日票,还是过去三十天用三十日票的总花费更低,因此判断dp[i - 1] + costs[0], dp[i - 7] + costs[1]), dp[i - 30] + costs[2]) 这三个数哪个最小,赋值为当前的dp[i]

代码:

    public int mincostTickets(int[] days, int[] costs) {
    	// 判断输入是否合法
        if (days == null || costs == null || costs.length != 3 || days.length == 0) return 0;

		// 状态的定义
        int[] dp = new int[days[days.length - 1] + 1];
        
		// 将有观影的时间点存入到 set中,便于判断
		Set<Integer> set = new HashSet<>();
        for (int day : days
             ) {
            set.add(day);
        }

		// 从第 day[0]天开始遍历,因为前面几日都无观影,花费为 0
        for (int i = days[0]; i < dp.length; i++) {
            if (set.contains(i)) {
                dp[i] = Math.min(Math.min(helper(dp, i - 1) + costs[0], helper(dp, i - 7) + costs[1]),
                        helper(dp, i - 30) + costs[2]);
            } else {
                dp[i] = dp[i - 1];
            }
        }
        return dp[days[days.length - 1]];
    }

	// 处理判断七日票跟三十日票时,可能出现数组越界的情况
    private int helper(int[] dp, int i) {
        if (i <= 0)
            return 0;
        return dp[i];
    }

在 LeetCode上提交结果:
在这里插入图片描述
其他 LeetCode 题目解析

刷力扣 LeetCode 算法题需要充值会员吗? 刷力扣算法题,需要充值会员吗?我的体验是会!为什么?请看文章 阅读详情

相关推荐

leetcode是收费的吗-LC150:LC150

leetcode是收费的吗LeetCode-Sol-Res 该存储库包含用于算法问题的 Java 解决方案和资源。 大部分解决方案来源于我自己的实现,问题讨论部分和,经过仔细清理和优化,从而更具可读性和可理解性! 资源目录中还提供了面试前快速复习的excel表格。 还想访问 Android 手机上的所有代码? 从 ! 特征 可理解的解决方案 级别分类:简单、中等和困难。 问题描述和标签在顶部。 清除解决方案说明。 关键点的在线评论。 不同的比较解决方案。 用于快速审查的解决方案表 所有问题的表格。 非常适合参考和审查目的! 该表有 5 张: LeetCode 总结(1 ~ 154) 新的免费问题(155 ~ 最新) 书中新问题(156 ~ 159, 161, 163, 167, 170, 186) 尖端 其他经典问题 每个问题行都有名称、级别、想法、代码和频率分析。 频率:来源于在线资源和面试经验。 想法:解决方案的总体思路的描述。 代码:实施的关键步骤。 提示:解决方案中出现的技巧和提示的摘要。 新问题:由于频率未知,放入一个页面。 重要和困难的问题标题加粗,关键点标记为红色。 其他

LeetCode第 983 题:最低票价(C++)

983. 最低票价 - 力扣(LeetCode) 状态转移表 动态规划,要求最小值,我们首先可以尝试使用状态转移表,使用一维数组就可以了: class Solution { public: int mincostTickets(vector<int>& days, vector<int>& costs) { int help[3] = {1,7,30};//和costs一一对应 int n = days.size();

zj 625

leetcode是收费的吗-LeetCode-Sol:LeetCode-Sol

leetcode是收费的吗LeetCode-Sol-Res 该存储库包含用于算法问题的 Java 解决方案和资源。 大部分解决方案来源于我自己的实现,问题讨论部分和,经过仔细清理和优化,从而更具可读性和可理解性! 资源目录中还提供了面试前快速复习的excel表格。 还想访问 Android 手机上的所有代码? 从 ! 特征 可理解的解决方案 级别分类:简单、中等和困难。 问题描述和标签在顶部。 清除解决方案说明。 关键点的在线评论。 不同的比较解决方案。 用于快速审查的解决方案表 所有问题的表格。 非常适合参考和审查目的! 该表有 5 张: LeetCode 总结(1 ~ 154) 新的免费问题(155 ~ 最新) 书中新问题(156 ~ 159, 161, 163, 167, 170, 186) 尖端 其他经典问题 每个问题行都有名称、级别、想法、代码和频率分析。 频率:来源于在线资源和面试经验。 想法:解决方案的总体思路的描述。 代码:实施的关键步骤。 提示:解决方案中出现的技巧和提示的摘要。 新问题:由于频率未知,放入一个页面。 重要和困难的问题标题加粗,关键点标记为红色。 其他

学生价,leetcode会员购买分析

这么看,数据就一目了然了。该选择何种价格,完全取决于个人需要leetcode会员时间,由上述图可知,如果你需要。最近想要购买leetcode会员,但不知道买啥好,打算用python可视化数据进行一个简单的分析。,那么curve 3才适合你,(因为curve 3比curve 1贵30,但长了半年)不得不说,python真好用啊我靠,以后有时间得狠狠学一波python。,curve 2适合你。

qq_62835094的博客 1924

leetcode是收费的吗-leetcode:LeetCode问题的解决方案

leetcode是收费的吗leetcode LeetCode 问题的解决方案。 # 标题 解决方案 运行 1 140 毫秒 2 296 毫秒 3 208 毫秒 6 280 毫秒 7 188 毫秒 226 136 毫秒 执照 麻省理工学院许可证 (MIT) 版权所有 (c) 2015 Lee < > 特此授予任何人免费获得本软件副本和相关文档文件(“软件”)的许可,不受限制地处理本软件,包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或出售软件的副本,并允许向其提供软件的人员这样做,但须符合以下条件: 上述版权声明和本许可声明应包含在软件的所有副本或重要部分中。 该软件“按原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权的保证。 在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任承担任何责任,无论是在合同诉讼、侵权行为或其他方面,由软件或软件的使用或使用或其他原因引起的或与之相关的软件。

机器学习项目(四)疫情期间网民情绪识别 (一)

疫情期间网民情绪识别 赛题背景 2019新型冠状病毒(2019-nCoV)感染的肺炎疫情发生对人们生活生产的方方面面产生了重要影响,并引发国内舆论的广泛关注,众多网民参与疫情相关话题的讨论。为了帮助政府掌握真实社会舆论情况,科学高效地做好防控宣传和舆情引导工作,本赛题针对疫情相关话题开展网民情绪识别的任务。 数据介绍 训练集 10万条 无标记样本90万条 测试集1万条 数据集依据与“新冠肺炎”相关...

qq_33357094的博客 8970

Leetcode 983:最低票价(超详细的解法!!!)

在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。 火车票有三种不同的销售方式: 一张为期一天的通行证售价为 costs[0] 美元; 一张为期七天的通行证售价为 costs[1] 美元; 一张为期三十天的通行证售价为 costs[2] 美元。 通行证允许数天无限制的旅行。 例...

coordinate的博客 5133

别再死记硬背参数了!手把手教你用Fluent欧拉模型搞定流化床模拟(附颗粒粘度/体积分数设置详解)

本文深入解析Fluent欧拉模型在流化床模拟中的应用,重点讲解颗粒粘度和体积分数等关键参数的设置原理与科学方法。通过对比不同模型(如Syamlal-O'Brien、Gidaspow)的适用场景,帮助工程师摆脱参数死记硬背,实现精准模拟。内容涵盖相间作用机制、求解策略优化及结果验证,为化工、能源领域的流化床模拟提供实用指南。

weixin_42656416的博客 427

【LeetCode】983. 最低票价 Minimum Cost For Tickets(C++ & Python)

作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/minimum-cost-for-tickets/ 题目描述: In a country popular for train travel, you have planned some train trav...

负雪明烛 4144

模电实验室:手把手教你调试共射放大电路静态工作点(避免波形失真)

本文详细介绍了共射放大电路静态工作点的调试方法,帮助避免波形失真问题。从实验准备、电路搭建到静态工作点测量,提供了实用的电阻选值策略和常见波形失真解决方案,适合电子相关专业学生和硬件工程师参考学习。

weixin_42531128的博客 375

PX4飞控CAN总线通信深度配置:从menuconfig到驱动加载的完整指南

本文详细解析了PX4飞控中CAN总线通信的深度配置流程,从menuconfig选项设置到驱动加载的完整指南。涵盖硬件抽象层、驱动层和应用层的配置细节,提供实际验证方法和故障排查技巧,帮助开发者高效实现CAN通信,特别适用于无人机和机器人底盘运动控制等场景。

weixin_30374009的博客 498

算法: 门票最低成本983. Minimum Cost For Tickets

983. Minimum Cost For Tickets You have planned some train traveling one year in advance. The days of the year in which you will travel are given as an integer array days. Each day is an integer from 1 to 365. Train tickets are sold in three different ways:

AI架构师易筋 474

微信公众号 - 最新详细实现H5网页接入微信支付功能,开发移动端、PC端网站集成使用微信支付流程及示例代码,公众号网页利用JS-SDK/JSAPI/H5支付授权唤起微信支付,可脱离微信环境支付或内置浏

微信公众号,微信支付,网页,移动端,h5,扫码支付,二维码付款,手机网页,电脑pc网页生成支付二维码,js-sdk,jsapi,外部浏览器调起微信支付,脱离微信环境,在微信内置浏览器如何进行微信支付,前端H5微信支付,web网站,vue2,vue3,nuxt2,nuxt3,jquery,微信公众号h5支付流程,如何实现,怎么做,回调报错,redirect_uri参数错误,必须部署才能调试吗,怎么不打包发布就能在本机测试,微信H5支付能力,uniapp微信支付,h5页面调起支付,支付没反应,无效,失败,H5页

🏆 前端领域优质创作者 6101

leetcode 983. Minimum Cost For Tickets | 983. 最低票价(动态规划)

题目 https://leetcode.com/problems/minimum-cost-for-tickets/ 题解 没想出来,看了官方题解,难点在于如何列出 dp 的状态转移方程。我没想到它的子问题是可以以这种“贪心”的方式求解的。 class Solution { public int mincostTickets(int[] days, int[] costs) { HashSet<Integer> daySet = new HashSet<>

寒泉 4万+

数学建模学习(75):全局敏感性分析Morris 方法

敏感性分析 (SA) 是分析不同应用条件下模型行为的基本实践。提出了许多 SA 技术,从简单的筛选方法到计算成本高昂的基于方差的方法。本篇内容我们通过将 Morris 方法来对模型进行分析。

全栈川川 1万+

PyTorch实战(20)——生成对抗网络(Generative Adversarial Network,GAN)

自生成对抗网络 (Generative Adversarial Network, GAN) 提出以来,一直是一个活跃的研究和开发领域。本节探索了 GAN 的基本概念,重点解析了其两大核心组件——生成器与判别器的架构设计,深入阐述了 GAN 模型的整体工作机制,并使用 PyTorch 从零开始实现了深度卷积生成对抗网络 (Deep Convolutional GAN, DCGAN)。

盼小辉丶的博客 3504

程序员刷题网站推荐

1、Leetcode 很多国内外的码农在上面刷题。难度从easy到hard都有,而且覆盖面极广。现在还增加了数据库和shell,相匹配的论坛也可以多看看,唯一一个缺点就是只有少数题目是免费的,其他都是要收费。 2、Lintcode 可以称作中文版本的Leetcode,个人感觉最高难度比Leetcode高一些。这两个类似的网站,可以配套来刷。每个刷一遍,也能保持新鲜感,但最重要的是上面的题目是不收费...

qq_41212530的博客 1545

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java&LeetCode 初入门——983. Minimum Cost For Tickets最小票价问题)

Java&LeetCode 初入门——983. Minimum Cost For Tickets最小票价问题题目个人解法官方解法方法1:Dynamic Programming (Day Variant)算法方法2:Dynamic Programming (Window Variant)算法 文内代码全部采用JAVA语言。 题目 In a country popular for train ...

红鲤鱼绿鲤鱼与赤小豆的博客 634

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Leetcode983. 最低票价

Leetcode983. 最低票价

ProgramNovice的博客 710

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【LeetCode】动态规划—983. 最低票价(附完整Python/C++代码)

在旅行中,选择最优的票务购买方案是一个常见的问题。给定多个出行日期以及不同票种的费用,我们需要计算出为旅行者提供的最小票务费用。本篇文章将通过动态规划的方法,探讨如何有效解决这个问题。

Albert_Lsk的博客 946

leetcode 983.最低票价

再再优化一下:还是在判断某一天是不是要旅行时,如果第d[j]天已经被访问到了(i等于过d[j]了),那么下一次访问到的旅游的天就是d[j-1],因此之后只需判断 i 是否等于d[j-1]即可,每一次访问到d[j],就让j--,注意不要越界。优化一下:上述dp[i]意思中,包含了365天,但是题目给出的数据很多并不是第365天还要旅游(也就是d[n-1]并不都是365),因此我们可以让dp[i]意为:后d[n-1]-i+1天的最小花费,因此节省了空间。dp[i]:后365-i+1天的最小花费。

qingwen666usve的博客 278

leetcode | go | 第983题 | 最低票价

【代码】leetcode | go | 第983题 | 最低票价。

iCling的博客 607

Leetcode 983. 最低票价 动态规划

【代码】Leetcode983.最低票价动态规划。

想买很多漂亮衣服但是买不起的博客 475

LeetCode简单题之计算应缴税款总额

通过实例1就可以知道income之前的收入都是当前阶段与上一阶段的收入差乘以当前阶段的比例,而到了income的那一个阶段是以较大的阶段为标准来收的,也就是向上取整,这一点可以在实例1中体现,所以对于题目的解决就需要分为两种情况来解决,当income出现在数组中,则不需要处理高一级的收费,反之则需要处理。返回你需要缴纳的税款总额。输入:brackets = [[1,0],[4,25],[5,50]], income = 2。需要支付的税款总计 $1.50 + $0.40 + $0.75 = $2.65。

Lonery的博客 626

刷了两遍LeetCode之后,我拿了9个offer

官方网站:http://leetcode.com/LeetCode是一个美国的在线编程网站,上面主要收集了各大IT公司的笔试面试题,对于找工作是一个不可多得的好帮手。LeetCode上面的题目偏基础性,基本上不考察复制的算法,很多都是对基础知识应用,难度与Topcoder div1 250或codeforces div1 A难度相当。如果想要练习编程基础或者准备面试的话,非常适合。其实,很多求职者都

haimianjie2012的专栏 9万+
上一篇: 【LeetCode 225】用一个or两个队列实现栈
下一篇: 源码学习 Java.lang.Comparable<T>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值