首页 / 资讯中心 / 文章详情

leetcode 耗时100 1824. Minimum Sideway Jumps

leetcode 耗时100 1824. Minimum Sideway Jumps ★ FEATURED ARTICLE
Problem: 1824. 最少侧跳次数三种方案的1、动态规划的就三种情况先拿到前一列到当前列的最小跳跃次数也就是copy然后计算同一列之间跳跃的最小值2、动态规划的空间优化版本只需要保存前一列的值3、回溯记忆化搜索可以做耗时100方案1Codeclass Solution { public: int n; int minSideJumps(vectorint obstacles) { n obstacles.size(); vectorvectorint dp(4, vectorint(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]}); } };方案2Codeclass Solution { public: int minSideJumps(vectorint 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}); } };
阅读完成 · 觉得有帮助?
咨询建站