LeetCode 1824. 最少侧跳次数(DP)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一个长度为 n 的 3 跑道道路 ,它总共包含 n + 1 个 点 ,编号为 0 到 n 。
一只青蛙从 0 号点第二条跑道 出发 ,它想要跳到点 n 处。然而道路上可能有一些障碍。

给你一个长度为 n + 1 的数组 obstacles ,其中 obstacles[i] (取值范围从 0 到 3)表示在点 i 处的 obstacles[i] 跑道上有一个障碍。
如果 obstacles[i] == 0 ,那么点 i 处没有障碍
任何一个点的三条跑道中 最多有一个 障碍。

比方说,如果 obstacles[2] == 1 ,那么说明在点 2 处跑道 1 有障碍。

这只青蛙从点 i 跳到点 i + 1 且跑道不变的前提是点 i + 1 的同一跑道上没有障碍。
为了躲避障碍,这只青蛙也可以在 同一个 点处 侧跳 到 另外一条 跑道(这两条跑道可以不相邻),但前提是跳过去的跑道该点处没有障碍。

比方说,这只青蛙可以从点 3 处的跑道 3 跳到点 3 处的跑道 1 。
这只青蛙从点 0 处跑道 2 出发,并想到达点 n 处的 任一跑道 ,请你返回 最少侧跳次数

注意:点 0 处和点 n 处的任一跑道都不会有障碍。

示例 1:
在这里插入图片描述

输入:obstacles = [0,1,2,3,0]
输出:2 
解释:最优方案如上图箭头所示。总共有 2 次侧跳(红色箭头)。
注意,这只青蛙只有当侧跳时才可以跳过障碍(如上图点 2 处所示)。

示例 2:
在这里插入图片描述

输入:obstacles = [0,1,1,3,3,0]
输出:0
解释:跑道 2 没有任何障碍,所以不需要任何侧跳。

示例 3:
在这里插入图片描述

输入:obstacles = [0,2,1,0,3,0]
输出:2
解释:最优方案如上图所示。总共有 2 次侧跳。提示:
obstacles.length == n + 1
1 <= n <= 5 * 10^5
0 <= obstacles[i] <= 3
obstacles[0] == obstacles[n] == 0

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-sideway-jumps
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • dp[pos][道的编号1-3] 表示到pos位置处在第几号道上的最少侧跳次数
class Solution {
public:int minSideJumps(vector<int>& obstacles) {int n = obstacles.size();vector<vector<int>> dp(n, vector<int>(4, INT_MAX));// dp[pos][道的编号1-3] 表示到pos位置处在第几号道上的最少侧跳次数dp[0][1] = dp[0][3] = 1;dp[0][2] = 0;//初始条件for(int i = 1; i < n; ++i){int prev = obstacles[i-1];//前一位置障碍道编号int cur = obstacles[i];//当前位置障碍道编号for(int j = 1; j <= 3; ++j){if(prev && prev==j)continue;//是障碍,j 不能状态转移for(int k = 1; k <= 3; ++k){if(cur && cur==k)continue;//是障碍不能转移到 kif(j == k)//相同道次dp[i][k] = min(dp[i][k], dp[i-1][j]);else if(prev==k && cur==j)//不同道次,且需要跳两次才能 j -> kdp[i][k] = min(dp[i][k], dp[i-1][j]+2);else//不同道次,只需跳一次dp[i][k] = min(dp[i][k], dp[i-1][j]+1);}}}return min(dp[n-1][1], min(dp[n-1][2], dp[n-1][3]));}
};

760 ms 267.3 MB C++

  • 当前状态只跟上一状态有关,状态可以压缩
class Solution {
public:int minSideJumps(vector<int>& obstacles) {int n = obstacles.size();vector<int> dp(4), tmp(4);dp[1] = dp[3] = 1;dp[2] = 0;//初始条件for(int i = 1; i < n; ++i){tmp[1]=tmp[2]=tmp[3]=INT_MAX;int prev = obstacles[i-1];//前一位置障碍道编号int cur = obstacles[i];//当前位置障碍道编号for(int j = 1; j <= 3; ++j){if(prev && prev==j)continue;//是障碍,j 不能状态转移for(int k = 1; k <= 3; ++k){if(cur && cur==k)continue;//是障碍不能转移到 kif(j == k)//相同道次tmp[k] = min(tmp[k], dp[j]);else if(prev==k && cur==j)//不同道次,且需要跳两次才能 j -> ktmp[k] = min(tmp[k], dp[j]+2);else//不同道次,只需跳一次tmp[k] = min(tmp[k], dp[j]+1);}}swap(dp, tmp);}return min(dp[1], min(dp[2], dp[3]));}
};

380 ms 158.3 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

i5集显和独显的区别_集显核显独显有哪些区别 集显核显独显区别介绍【详解】...

显卡是除处理器之外最受大家关心的硬件装备了&#xff0c;要是显卡配置不到位&#xff0c;其他再好都是浮云&#xff0c;而对于游戏玩家来说&#xff0c;显卡性能差的话更是影响游戏的运行&#xff0c;可折腾人了。今天小编为大家分享“集显”、“核显”和“独显”这3个显卡概念…

桌面软件打开都会变成计算机,我不小心把电脑界面程序的打开方式都变成一种了,怎么还原啊?...

如果不小心把电脑桌面程序的打开方式错误的设置成一种后&#xff0c;可以通过以下几种方法还原&#xff1a;方法一&#xff1a;可以通过360里的“360电脑修复专家”功能&#xff0c;进入后&#xff0c;在对话框里输入“电脑的图标异常”&#xff0c;之后立即会自动解决&#xf…

postman 使用_Postman简单使用

今天主要讲解下Postman的简单使用。在使用前&#xff0c;首先需要了解一下什么是Postman&#xff0c;它可以用来做什么&#xff1f;1、 Postman是一款自动化测试的工具&#xff0c;它可以方便的处理HTTP的请求(get、post、put、delete等)。本文主要讲解get和post的使用。2、 那…

中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日

一&#xff1a;题目大意 本题通过给定三个数组S0&#xff0c;P&#xff0c;S&#xff0c;其中S0是1到2n的一个排列&#xff0c;P具有2n个整数&#xff0c;且满足&#xff1a; 数组S是把数组S0中所有奇数元素全部删除并将所有偶数元素除以2并按照原来的相对顺序进行排列而得。 现…

LeetCode 1825. 求出 MK 平均值(set + queue)

文章目录1. 题目2. 解题1. 题目 给你两个整数 m 和 k &#xff0c;以及数据流形式的若干整数。 你需要实现一个数据结构&#xff0c;计算这个数据流的 MK 平均值 。 MK 平均值 按照如下步骤计算&#xff1a; 如果数据流中的整数少于 m 个&#xff0c;MK 平均值 为 -1 &#…

vue热更新无法关闭_vue-cli3热更新失效

vue-cli3热更新失效问题公司的一个使用vue-cli3搭建的项目一直无法热更新&#xff0c;每次保存代码后都需要手动刷新页面才能看到修改之后的页面&#xff0c;作为一个强迫症晚期患者&#xff0c;那肯定是忍不了。经过个人研究学习&#xff0c;修复好了项目热更新问题&#xff0…

职高计算机选修6知识点,(计算机基础考试7.doc

试卷编号&#xff1a;9619所属语言&#xff1a;计算机基础试卷方案&#xff1a;WINhy试卷总分&#xff1a;100分共有题型&#xff1a;4种一、单选 共40题 (共计40分)第1题 (1.0分) 题号:5923 难度:中 第81章一个六位的二进制数,如果其最高位和最低位都为1,则在下列十进制数中,可…

python中importlib模块安装_Python中标准模块importlib详解

Python中标准模块importlib详解 模块简介 Python提供了importlib包作为标准库的一部分。目的就是提供Python中import语句的实现&#xff08;以及__import__函数&#xff09;。另外&#xff0c;importlib允许程序员创建他们自定义的对象&#xff0c;可用于引入过程&#xff08;也…

HiveQL:查询

文章目录1. select from1.1 正则表达式指定列1.2 使用列值计算1.3 使用函数1.4 limit 限制返回行数1.5 别名 as name1.6 case when then 语句2. where 语句3. JOIN 优化4. 抽样查询5. union all学自《hive编程指南》 1. select from hive (default)> create table employe…

unity鼠标控制镜头旋转_Unity Camera教程之 摄像机跟随鼠标移动而旋转

FollowMouseMove 脚本具体内容如下&#xff1a;using UnityEngine;public class FollowMouseMove : MonoBehaviour {public float moveSpeed 5.0f;// Use this for initializationvoid Start(){}// Update is called once per framevoid Update(){// 获得鼠标当前位置的X和Yfl…

html里span和div,HTML div和span

块代码和1...ccwTest {font-family: .PingFang SC;">;color:white;margin:18px;padding:16px;}这些是文字这里是内容,改变这些文字的颜色或者是改变其他属性需要写在style里 ccwTest是名字,相当于ios中的对象名 通过这个对象名找到是调用的哪个方法2..span.red {color:…

python闭包详解函数_详解python函数的闭包问题(内部函数与外部函数详述)

python函数的闭包问题&#xff08;内嵌函数&#xff09; >>> def func1(): ... print (func1 running...) ... def func2(): ... print (func2 running...) ... func2() ... >>> func1() func1 running... func2 running... 内部函数func2作用域都在外部函数…

实现一个简单的web服务器

代码&#xff1a;http://www.oschina.net/code/snippet_991746_45911转载于:https://www.cnblogs.com/lit10050528/p/4282771.html

python format 冒号_python之格式化输出

字符串格式化有两种方式&#xff0c;%和format先介绍下%号的方法#%s的语法结构&#xff0c;叫做占位符&#xff0c;就是先占一个位置&#xff0c;然后我们用真实的要显示的数据替换占位符即可#最简单的用法就是下面的方式&#xff0c;其实%s还有其他的功能# s 我的名字是%s,我…

Scala 入门1(变量、分支循环、函数)

文章目录1. var 变量&#xff0c;val常量2. 分支、循环3. 函数、方法4. 闭包学自 https://www.runoob.com/scala/scala-tutorial.html 1. var 变量&#xff0c;val常量 scala 语句 用 ; 或者 \n 分句 object HelloWorld { // 类名跟文件名一致def main(args: Array[String])…

2018qs计算机科学专业,2018QS世界大学计算机科学专业排名.docx

2018QS世界大学计算机科学专业排名在2018世界大学计算机科学与信息系统排名中&#xff0c;牛津大学位列第一&#xff0c;哈佛大学和剑桥大学紧随其后。本排名中&#xff0c;共有2所中国大学进入Top50&#xff0c;北京大学位列第17位&#xff0c;清华大学列 20 位&#xff0c;跟…

http://www.cnblogs.com/langjt/p/4281477.html

http://www.cnblogs.com/langjt/p/4281477.html转载于:https://www.cnblogs.com/outlooking/p/4283320.html

nineoldandroid使用_nineoldandroid 详细使用并且实现drawerlayout侧滑动画

nineoldandroid.view.ViewHelpe是一个为了兼容3.0以下的一个动画开源库相关函数解读&#xff1a;(第一个参数都为动画对象&#xff0c;第二个为动画属性值的变化表达式)ViewHelper.setTranslationX(,);//x方向平移ViewHelper.setTranslationY(,);ViewHelper.setScaleX(,);x方向…

maven deploy plugin_Maven快速上手

作者&#xff1a;u_7deeb657158f出自&#xff1a;ITPUB博客原文&#xff1a;blog.itpub.net/69956102/viewspace-2726121/创建项目首先需要创建一个用于存储项目的文件夹&#xff0c;在控制台中输入以下命令&#xff1a;mvn archetype:generate -DgroupIdcom.mycompany.app -Da…

计算机应用基础形考作业3Excel部分,计算机应用基础形考3,Excel部分

“计算机应用基础”形考作业 3(Excel部分)可根据所学知识模块&#xff0c;在下列Excel、PowerPoint或Access中选做一个&#xff0c;我选了Excel (本次作业覆盖“模块 3 Excel 2010 电子表格系统”的内容&#xff0c;请在学完模块3后完成本次作业&#xff0c;要求第17周内完成。…