Java инициализирует большой массив со значением Max - PullRequest
4 голосов
/ 29 апреля 2011

Как я могу инициализировать массив размером 1000 * 1000 * 1000 * 1000 из всех Integer.MAXVALUE?

, например, я хочу, чтобы все int[][][][]dp = new int [1000][1000][1000][1000]; имели максимальное значение, так как позже мне нужно сравнить минимум.

Я пытался

int [] arr = new int arr[N];
Arrays.fill(arr,Integer.MAXVALUE);

, но он не работает с многомерными массивами, кто-нибудь может помочь?

Ответы [ 3 ]

12 голосов
/ 29 апреля 2011

Вам нужно будет сделать это, чтобы заполнить ваш многомерный массив:

for (int i = 0; i < dp.length; i++) {
    for (int j = 0; j < dp[i].length; j++) {
        for (int k = 0; k < dp[j].length; k++) {
            Arrays.fill(dp[i][j][k], Integer.MAX_VALUE);
        }
    }
}

Однако вы не сможете инициализировать new int[1000][1000][1000][1000], если у вас не меньше 3,64 терабайт памяти.Не говоря уже о том, сколько времени это заняло бы, если бы у тебя было столько памяти.

2 голосов
/ 29 апреля 2011

Вам нужно что-то очень специализированное, например Кольт , чтобы генерировать то, что называется Разреженная матрица .Вам нужно немного изменить свою логику, вместо того, чтобы проверять Integer.MAX_VALUE, который вы проверяете, чтобы увидеть, существует ли что-то в местоположении (по умолчанию НОЛЬ), если он не учитывает это Integer.MAX_VALUE, и оставить его в покое.

Предполагается, что вы вставляете только часть возможных данных со значениями < Integer.MAX_VALUE.

0 голосов
/ 20 февраля 2016

fill будет нуждаться в качестве аргументов в массиве и значениях для заполнения в каждом измерении. Скажите fill (массив, 0,0,0) или в вашем случае fill (массив, maxValue, maxValue, maxValue).

Приветствия

...