在Java中实例化一个用整数列表存储ArrayList的2d List

问题描述 投票:0回答:1
import java.util.HashSet;
import java.util.ArrayList;
class Solution {
    public int longestIncreasingPath(int[][] matrix) {
        List<ArrayList<Integer>>[][] dp = new List[matrix.length][matrix[0].length];
        for (int i = matrix.length - 1; i >= 0; i--) {
            for (int j = matrix[0].length - 1; j >= 0; j--) {
                dp[i][j] = new ArrayList<>();
                if (j - 1 >= 0 && matrix[i][j-1] < matrix[i][j]) {
                    int[] pair = new int[2];
                    pair[0] = i;
                    pair[1] = j - 1;
                    dp[i][j].add(pair);
                }
                if (j + 1 < matrix[0].length && matrix[i][j+1] < matrix[i][j]) {
                    int[] pair = new int[2];
                    pair[0] = i;
                    pair[1] = j + 1;
                    dp[i][j].add(pair);
                }
                if (i - 1 >= 0 && matrix[i-1][j] < matrix[i][j]) {
                    int[] pair = new int[2];
                    pair[0] = i - 1;
                    pair[1] = j;
                    dp[i][j].add(pair);
                }
                if (i + 1 < matrix.length && matrix[i+1][j] < matrix[i][j]) {
                    int[] pair = new int[2];
                    pair[0] = i + 1;
                    pair[1] = j;
                    dp[i][j].add(pair);
                }
            }
        }

        int[][] longest = new int[matrix.length][matrix[0].length];

        HashSet<List<Integer>> visited = new HashSet<>();
        for (int i = matrix.length - 1; i >= 0; i--) {
            for (int j = matrix[0].length - 1; j >= 0; j--) {
                longest[i][j] = 0;
                ArrayList<Integer> element = dp[i][j];
                dfs(visited, element, i, j, longest, dp);
            }
        }

        int length = 0;
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                if (longest[i][j] > length) {
                    length = longest[i][j];
                }
            }
        }

        return length;

    }

    public void dfs(HashSet<List<Integer>> visited, ArrayList<Integer> neighbors, int x, int y, int[][] longest, List<ArrayList<Integer>>[][] dp) {
        for (int i = 0; i < neighbors.size(); i++) {
            neighbor = neighbors[i];
            n_x = neighbor[0];
            n_y = neighbor[1];
            neighbor_list = dp[n_x][n_y];
            if (!visited.contains(neighbors[i])) {
                dfs(visited, neighbor_list, n_x, n_y, longest, dp);
            }
            if (longest[n_x][n_y] > longest[x][y]) {
                longest[x][y] = longest[n_x][n_y] + 1;
            }
        }
    }
}

上面的代码是我写的。我收到 dp[i][j].add(pair) 行的错误

错误:不兼容的类型:int[] 无法转换为 ArrayList dp[i][j].add(pair);.

我不确定为什么会收到该错误。我想实例化一个 2D 列表,其中每个条目存储一个整数列表的 ArrayList,其中每个列表的长度为 2。我不确定我做错了什么。我相信我最初正确地实例化了 ArrayLists (dp) 列表;然后,对于 dp 中的每个条目,我实例化了一个 ArrayList,并将列表附加到其中。我到底做错了什么?

java arrays multidimensional-array arraylist
1个回答
0
投票

构造函数

List<ArrayList<Integer>>[][] dp = new List[matrix.length][matrix[0].length];
不正确。这将创建一个由整数 ArrayList 组成的列表的二维数组。我相信您正在努力实现
ArrayList[][] dp = new ArrayList[matrix.length][matrix[0].length];
?这将消除错误。如果我正确理解你的问题,这应该可以解决它。

© www.soinside.com 2019 - 2024. All rights reserved.