leetcode 耗时100 1824. Minimum Sideway Jumps
2026/9/24 2:08:07 网站建设 项目流程

Problem: 1824. 最少侧跳次数

三种方案的,

1、动态规划的,就三种情况,先拿到前一列到当前列的最小跳跃次数,也就是copy,然后计算同一列之间跳跃的最小值

2、动态规划的,空间优化版本,只需要保存前一列的值

3、回溯+记忆化搜索,可以做

耗时100,

方案1Code

class Solution { public: int n; int minSideJumps(vector<int>& obstacles) { n = obstacles.size(); vector<vector<int>> dp(4, vector<int>(n + 1, INT_MAX/10)); dp[1][0] = 1; dp[2][0] = 0; dp[3][0] = 1; for(int i = 1; i < n; i++) { for(int j = 1; j < 4; j++) { if(j != obstacles[i-1]) { dp[j][i] = min(dp[j][i-1], dp[j][i]); } } if(obstacles[i] == 0) { dp[1][i] = min(dp[1][i], dp[2][i] + 1); dp[1][i] = min(dp[1][i], dp[3][i] + 1); dp[2][i] = min(dp[2][i], dp[1][i] + 1); dp[2][i] = min(dp[2][i], dp[3][i] + 1); dp[3][i] = min(dp[3][i], dp[1][i] + 1); dp[3][i] = min(dp[3][i], dp[2][i] + 1); } else if(obstacles[i] == 1) { dp[2][i] = min(dp[2][i], dp[3][i] + 1); dp[3][i] = min(dp[3][i], dp[2][i] + 1); } else if(obstacles[i] == 2) { dp[1][i] = min(dp[1][i], dp[3][i] + 1); dp[3][i] = min(dp[3][i], dp[1][i] + 1); } else if(obstacles[i] == 3) { dp[1][i] = min(dp[1][i], dp[2][i] + 1); dp[2][i] = min(dp[2][i], dp[1][i] + 1); } } return min({dp[1][n-1], dp[2][n-1], dp[3][n-1]}); } };

方案2Code

class Solution { public: int minSideJumps(vector<int>& obstacles) { int n = obstacles.size(); int mxmx = INT_MAX/10; int a1 = mxmx, a2 = mxmx, a3 = mxmx; int pa1, pa2, pa3, t1, t2, t3; pa1 = 1; pa2 = 0; pa3 = 1; for(int i = 1; i < n; i++) { if(obstacles[i-1]!=1) t1 = pa1; else t1 = mxmx; if(obstacles[i-1]!=2) t2 = pa2; else t2 = mxmx; if(obstacles[i-1]!=3) t3 = pa3; else t3 = mxmx; a1 = t1; a2 = t2; a3 = t3; if(obstacles[i] == 0) { a1 = min(a1, t2 + 1); a1 = min(a1, t3 + 1); a2 = min(a2, t1 + 1); a2 = min(a2, t3 + 1); a3 = min(a3, t1 + 1); a3 = min(a3, t2 + 1); } else if(obstacles[i] == 1) { a2 = min(a2, t3 + 1); a3 = min(a3, t2 + 1); a1 = mxmx; } else if(obstacles[i] == 2) { a1 = min(a1, t3 + 1); a3 = min(a3, t1 + 1); a2 = mxmx; } else if(obstacles[i] == 3) { a1 = min(a1, t2 + 1); a2 = min(a2, t1 + 1); a3 = mxmx; } pa1 = a1; pa2 = a2; pa3 = a3; } return min({pa1, pa2, pa3}); } };

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询