JavaScript 中包含递增序列的二维最长路径
递增序列
每个后续元素都大于或等于前一个元素的数字序列是递增序列。
例如,
4, 6, 8, 9, 11, 14 is increasing sequence 3, 3, 3, 3, 3, 3, 3 is also an increasing sequence
问题:
我们需要编写一个JavaScript函数,该函数接受二维数字数组arr作为唯一参数。我们的函数应该找到并返回数组中只包含递增数字的最长路径的长度。
例如,如果函数的输入是-
const arr = [ [4, 5, 6], [4, 3, 7], [3, 3, 2] ];
那么输出应该是-
const output = 4;
输出说明:
因为最长的递增序列是4、5、6、7。
示例
此代码将是-
const arr = [ [4, 5, 6], [4, 3, 7], [3, 3, 2] ]; const longestIncreasingPath = (arr = []) => { let longest = 0; let dp = Array(arr.length).fill(null).map(() => Array(arr[0].length).fill(1)); const backtracking = (row, col) => { if (dp[row][col]!=1) return dp[row][col]; let dRow = [1,0,-1,0]; let dCol = [0,1,0,-1]; for (let i = 0;i= 0 && nR = 0 && nC < arr[0].length && arr[nR][nC] > arr[row][col]) { dp[row][col] = Math.max(dp[row][col], 1 + backtracking(nR, nC)) }; }; return dp[row][col]; } for (let i=0;i 代码说明:
想法
在这里,我们使用了回溯深度优先搜索。
递归函数只返回给定行和列的最长递增路径
如果我们已经有一个位置的最长增加路径的记录,那么我们可以简单地返回它。
输出结果
控制台中的输出将是-
4