gpt4 book ai didi

java - 找到二维数组中最长的递增序列

转载 作者:行者123 更新时间:2023-12-02 02:33:30 24 4
gpt4 key购买 nike

enter image description here

我已经研究这个问题一段时间了,但无法找到解决方案;我希望你能帮忙..

我正在尝试找到最长的递增数字序列。例如,如果我有以下 4X4 数组:

[![enter image description here][1]][1]

int [] nums = {
{97 , 47 , 56 , 36},
{35 , 57 , 41 , 13},
{89 , 36 , 98 , 75},
{25 , 45 , 26 , 17}
};

预期结果:返回 8 和 LIS 17, 26, 36, 41, 47, 56, 57, 97我还没有答案,我正在努力寻找答案。

17  (3,3)
26 (3,2)
36 (2,1)
41 (1,2)
47 (0,1)
56 (0,2)
57 (1,1)
97 (0,0)

我希望我的例子足够清楚..

这是我的代码;当我试图找到最长的增加路径时,它不会向后而不是对角地进行。有人可以帮我吗?

public class Solution2 {
static int[] dx = { 1, -1, 0, 0 };
static int[] dy = { 0, 0, 1, -1 };
public static int longestIncreasingPath(int[][] matrix) {
if (matrix.length == 0)
return 0;
int m = matrix.length, n = matrix[0].length;
int[][] dis = new int[m][n];
int ans = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
ans = Math.max(ans, dfs(i, j, m, n, matrix, dis));
}
}
return ans;
}

static int dfs(int x, int y, int m, int n, int[][] matrix, int[][] dis) {
if (dis[x][y] != 0)
return dis[x][y];

for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 0 && ny >= 0 && nx < m && ny < n && matrix[nx][ny] > matrix[x][y]) {
dis[x][y] = Math.max(dis[x][y], dfs(nx, ny, m, n, matrix, dis));
}
}
return ++dis[x][y];
}

public static void main(String[] args) {
int arr[][] = {
{ 97, 47, 56, 36 },
{ 35, 57, 41, 13 },
{ 89, 36, 98, 75 },
{ 25, 45, 26, 17 }
};
System.out.println(longestIncreasingPath(arr));
}
}

最佳答案

我假设我们正在寻找一个严格递增序列(这在原始问题描述中并不清楚)。这个问题可以通过动态规划方法来解决:

1) 按单元格的值降序对单元格进行排序。

2) 按降序分配从此单元格开始的最长路径的长度:

2a) 如果您无法到达之前访问过的任何单元格,则分配 1

2b) 否则分配 1 + max(可到达的前一个单元格)

完成后,总体最大值就是最长路径的长度。路径本身也可以通过记住步骤 2b) 中的最大单元格来找到。

在示例中给出:

                                            0,3 2,1
cell 98 97 89 75 57 56 47 45 41 36 36 35 26 25 17 13
length 1 1 1 2 2 3 4 2 5 6 6 7 7 7 8 7

关于java - 找到二维数组中最长的递增序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46740695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com