我一直在這個問題上一段時間,無法拿出解決方案的最長遞增序列;我希望你能幫上忙..
我試圖找到最長的增加序列的數字。例如,如果我有以下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));
}
}
我不明白你正在嘗試做的。您列出了不在您提供的數組中的最長序列;我甚至沒有看到你的答案和你的數據之間的關係。這個最長的序列從哪裏來? –
你的例子不清楚它將如何返回8? – Lokesh
17-> 26-> 36-> 41-> 47-> 56-> 57-> 97 它從陣列的右下方往上走。 我在示例中添加了座標。 –