2
* @param {number[]} obstacles5
// var solve = function(obstacles, lane, pos, dp) {6
// if (pos === obstacles.length - 1) {9
// // Obstacle on next straight position10
// if (dp[lane][pos] !== -1) {11
// return dp[lane][pos];13
// if (obstacles[pos + 1] !== lane) {14
// return solve(obstacles, lane, pos + 1, dp);16
// let ans = Number.MAX_SAFE_INTEGER;17
// for (let i = 1; i <= 3; i++) {18
// if (i !== lane && obstacles[pos] !== i) {19
// ans = Math.min(ans, 1 + solve(obstacles, i, pos + 1, dp)); // Updated pos here22
// dp[lane][pos] = ans;27
// var minSideJumps = function(obstacles) {28
// let dp = Array.from({ length: 4 }, () => Array(obstacles.length).fill(-1));29
// return solve(obstacles, 2, 0, dp);32
// var minSideJumps = function(obstacles) {33
// let n = obstacles.length;34
// let dp = Array.from({ length: 4 }, () => Array(n).fill(Number.MAX_SAFE_INTEGER));36
// // Initialize the last column of dp to 042
// for (let pos = n - 2; pos >= 0; pos--) {43
// for (let lane = 1; lane <= 3; lane++) {44
// if (obstacles[pos + 1] !== lane) {45
// dp[lane][pos] = dp[lane][pos + 1];47
// let ans = Number.MAX_SAFE_INTEGER;48
// for (let i = 1; i <= 3; i++) {49
// if (i !== lane && obstacles[pos] !== i) {50
// ans = Math.min(ans, 1 + dp[i][pos + 1]);53
// dp[lane][pos] = ans;58
// // Fix the return statement59
// return Math.min(dp[2][0], Math.min(1 + dp[1][0], 1 + dp[3][0]));62
var minSideJumps = function (obstacles) {63
let n = obstacles.length;64
let curr = Array(4).fill(Number.MAX_SAFE_INTEGER);65
let next = Array(4).fill(0);67
for (let pos = n - 2; pos >= 0; pos--) {68
for (let lane = 1; lane <= 3; lane++) {69
if (obstacles[pos + 1] !== lane) {70
curr[lane] = next[lane];72
let ans = Number.MAX_SAFE_INTEGER;73
for (let i = 1; i <= 3; i++) {74
if (i !== lane && obstacles[pos] !== i) {75
ans = Math.min(ans, 1 + next[i]);83
return Math.min(next[2], Math.min(1 + next[1], 1 + next[0]));