java - 如何解决有关此代码的 java.lang.OutOfMemoryError
问题描述
这是一个简单的任务,将“之字形”矩阵中的元素相加水平移动。变量“sumPath”需要很长,它会抛出“java.lang.OutOfMemoryError”。
我有两个“for”周期,需要缩短它们。
我怎么能做到?
这是代码:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = Integer.parseInt(scanner.next());
int m = Integer.parseInt(scanner.next());
int[][] matrix = new int[n][m];
long sumPath = 1;
matrix[0][0] = 1;
for (int row = 0; row < n; row++) {
if (row > 0) {
matrix[row][0] = matrix[row - 1][0] + 3;
}
for (int col = 1; col < m; col++) {
matrix[row][col] = matrix[row][col - 1] + 3;
}
}
int row = 0;
while (row < n-1) {
for (int col = 1; col < m; col++) {
if (col % 2 == 0) {
sumPath = sumPath + matrix[row][col];
} else {
sumPath = sumPath + matrix[row+1][col];
}
}
row = row + 2;
if (row >= n) {
break;
}
for (int col = m - 2; col >= 0; col--) {
if (col % 2 == 0) {
sumPath = sumPath + matrix[row][col];
} else {
sumPath = sumPath + matrix[row-1][col];
}
}
}
System.out.println(sumPath);
}
}
解决方案
只有一行代码可能会发生 OutOfMemoryException:
int[][] matrix = new int[n][m];
矩阵必须完全适合内存。当数字 n 和 m 太大时,矩阵将变得对于可用内存来说太大。
推荐阅读
- python - 将python文件导入谷歌云中的vim时出现无休止的标签问题
- typescript - Moment.diff 不是函数
- java - Jetty 7.6 不编译 JSP 文件
- design-patterns - 管道和过滤器模式的替代方案
- javascript - Node.js 护照 OAuth 2.0 身份验证:存储访问和刷新令牌的位置
- pandas - Pandas 合并指标自定义值
- python - 在指纹传感器 PYTHON 上无输入 15 秒后退出指纹程序
- javascript - 如何使用 node.js 捕获用户加载页面的屏幕
- python - Numpy RuntimeWarning 与数组长度 1 不一致
- c# - C#如何从JSON中获取数据