LC-1824. 最少侧跳次(动态规划)
创始人
2024-05-15 05:00:13
0

1824. 最少侧跳次数

难度中等49

给你一个长度为 n3 跑道道路 ,它总共包含 n + 1 ,编号为 0n 。一只青蛙从 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:

img

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

示例 2:

img

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

示例 3:

img

输入:obstacles = [0,2,1,0,3,0]
输出:2
解释:最优方案如上图所示。总共有 2 次侧跳。

提示:

  • obstacles.length == n + 1
  • 1 <= n <= 5 * 105
  • 0 <= obstacles[i] <= 3
  • obstacles[0] == obstacles[n] == 0

动态规划

class Solution {public int minSideJumps(int[] obstacles) {int n = obstacles.length;// 定义状态:dp[i][j]:到达第i个结点且在第j条道路所需要的最少侧跳数量int[][] dp = new int[n+1][4];// 初始化for(int i = 1; i <= n; i++){Arrays.fill(dp[i], 1000000);}dp[1][2] = 0;dp[1][3] = 1;dp[1][1] = 1;for(int i = 2; i <= n; i++){// 当前结点上的跑道上没有石头, 则直接可以由同一个跑道跳过来if(obstacles[i-1] != 1){dp[i][1] = dp[i-1][1];}if(obstacles[i-1] != 2){dp[i][2] = dp[i-1][2];}if(obstacles[i-1] != 3){dp[i][3] = dp[i-1][3];}// 除了可以从同一跑道的前一个结点跳过来, 还可以从其他另外两个跑道侧跳过来if(obstacles[i-1] != 1){dp[i][1] = Math.min(dp[i][1], Math.min(dp[i][2],dp[i][3])+1);}if(obstacles[i-1] != 2){dp[i][2] = Math.min(dp[i][2], Math.min(dp[i][1],dp[i][3])+1);}if(obstacles[i-1] != 3){dp[i][3] = Math.min(dp[i][3], Math.min(dp[i][1],dp[i][2])+1);}}return Math.min(dp[n][1], Math.min(dp[n][2], dp[n][3]));}
}

相关内容

热门资讯

wp怎么刷安卓系统,基于WP平... 你有没有想过,你的WP手机也能装上安卓系统呢?听起来是不是有点神奇?别急,今天我就来给你详细介绍怎么...
安卓系统和平板哪个好用,谁更胜... 你有没有想过,安卓系统和平板电脑哪个更合你的胃口呢?这个问题可真是让人纠结啊!毕竟,现在市面上平板电...
安卓盒子刷电视系统,畅享智能观... 你有没有想过,家里的安卓盒子刷上电视系统后,竟然能变得如此神奇?想象原本只能看视频的盒子,现在能变身...
安卓系统怎么下dnf,安卓系统... 你有没有想过,在安卓手机上下载《地下城与勇士》(简称DNF)这款游戏,竟然也能成为一门学问呢?没错,...
安卓系统隐私来电软件,安卓系统... 你知道吗?在咱们这个信息爆炸的时代,手机里的隐私问题可是越来越让人头疼了。尤其是安卓系统,那可是咱们...
领克车机系统安卓,安卓智能驾驶... 你有没有发现,现在开车的时候,车机系统越来越智能了?尤其是领克的安卓车机系统,简直让人爱不释手。今天...
安卓原生系统通知声音,定制个性... 你知道吗?手机里那些时不时冒出来的通知,有时候就像小精灵在耳边悄悄说话,有时候又像是闹钟在催你起床。...
安卓系统电脑键盘功能 你有没有发现,用安卓系统电脑打字的时候,键盘功能可真是丰富得让人眼花缭乱呢?今天,就让我带你一起探索...
安卓修改文件系统后缀,解锁文件... 你有没有想过,你的安卓手机里的文件系统后缀可以随意修改?听起来是不是有点神奇?没错,今天就来带你一探...
安卓系统多任务流转 你有没有发现,在使用安卓手机的时候,有时候会突然冒出一个任务流转的功能,让你瞬间切换到另一个应用,是...
神姬红包版安卓系统,解锁全新游... 你知道吗?最近在手机圈里,有个神姬红包版安卓系统可是火得一塌糊涂呢!这不,我就迫不及待地来和你聊聊这...
为什么国内要用安卓系统,探索国... 你知道吗?在国内,安卓系统可是占据了半壁江山呢!为什么国内要用安卓系统呢?这背后可是有着不少有趣的故...
htc安卓系统怎么升级8.0,... 亲爱的手机控们,你是否也像我一样,对手机系统升级充满了期待和好奇呢?尤其是当HTC安卓系统升级到8....
安卓系统最好的应用助手,助你轻... 你有没有发现,手机里那些乱糟糟的图标和复杂的设置让你头疼不已?别担心,今天我要给你介绍一个安卓系统里...
安卓系统如何下载teamhub... 你有没有想过,在安卓系统上下载一个叫做Teamhub的应用程序呢?这可是个超级实用的工具,无论是工作...
安卓系统如何看无线密码,安卓系... 你有没有想过,你的安卓手机是怎么看懂无线密码的呢?是不是觉得这背后藏着什么神秘的黑科技?别急,今天就...
pd13安装安卓系统,PD13... 你有没有想过,给你的PD13平板电脑装个全新的安卓系统,让它焕发第二春呢?想象那流畅的操作体验,那丰...
苹果系统怎么比安卓好,五大优势... 你有没有想过,为什么苹果系统那么多人喜欢,而安卓系统虽然普及,但总感觉少了点啥?今天,就让我来给你细...
苏州攻略系统和安卓互通,安卓互... 你打算去苏州游玩一番,是不是已经迫不及待想要探索这座古城的韵味了呢?别急,别急,让我来给你支支招,让...
安卓变苹果系统教程荣耀,安卓变... 你是不是也和我一样,对手机系统转换充满了好奇?想要从安卓跳到苹果的阵营,却又觉得一头雾水?别担心,今...