如何初始化所有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);
但它不适用于多维数组,任何人都可以帮忙吗?
答案 0 :(得分:12)
你必须这样做才能填满你的多维数组:
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);
}
}
}
但是,除非您的内存至少 3.64太字节,否则您无法初始化new int[1000][1000][1000][1000]
。更不用说如果你有那么多记忆需要多长时间。
答案 1 :(得分:2)
您需要一些非常专业的内容,例如Colt来生成所谓的Sparse Matrix。您需要稍微改变您的逻辑,而不是针对您测试的Integer.MAX_VALUE
进行测试以查看某个位置是否存在某些内容(默认为ZERO),如果不存在,则将其视为Integer.MAX_VALUE
并保留单独
这假设您只插入值为< Integer.MAX_VALUE
的可能数据的一小部分。
答案 2 :(得分:0)
fill将需要作为参数的数组和每个维度填充的值。假设填充(数组,0,0,0)或在您的情况下填充(数组,maxValue,maxValue,maxValue)。
干杯,