为什么我在Matrix中填Integer.MAX_VALUE
Why do I fill Integer.MAX_VALUE in Matrix
本题出自LeetCode 174.地下城游戏
代码能够 运行 正确。
但是如果我删除 for (int[] level : dp) Arrays.fill(level, Integer.MAX_VALUE);
,代码将失败。
为什么代码不能运行,如果我删除for (int[] level : dp) Arrays.fill(level, Integer.MAX_VALUE);
class Solution {
public int calculateMinimumHP(int[][] dungeon) {
int rows = dungeon.length;
int cols = dungeon[0].length;
int[][] dp = new int[rows + 1][cols + 1];
for (int[] level : dp) Arrays.fill(level, Integer.MAX_VALUE);
dp[rows][cols - 1] = 1;
dp[rows - 1][cols] = 1;
for(int i = rows - 1; i >= 0; i--){
for(int j = cols - 1; j >= 0; j--){
int min = Math.min(dp[i][j + 1] , dp[i + 1][j]) - dungeon[i][j];
dp[i][j] = min <= 0 ? 1 : min;
}
}
return dp[0][0];
}
}
使用Integer.MAX_VALUE
的原因与以下行有关:
int min = Math.min(dp[i][j + 1] , dp[i + 1][j]) - dungeon[i][j];
在不知道您的代码的完整逻辑的情况下,很明显,对 Math.min()
的调用试图找到两个点中较小的一个。假设您只将实际游戏数据分配给一个点,那么分配的任何单个值都将显示为最小值。这也假设您永远不会拥有像 Integer.MAX_VALUE
.
这样大的游戏数据
因为min(Integer.MAX_VALUE, anything_else) = anything_else
.
因此,在数组中查找最小值的代码应该从 min=MAX_VALUE
开始,假设必须有一个值小于数组中某处的值。
found_min=MAX_VALUE
for (int i=0 ; i<size ; ++i)
found_min = min(arr[i], found_min)
此代码失败的唯一方法是当数组为空时,然后返回的 found_min
将保持 MAX_VALUE
。
本题出自LeetCode 174.地下城游戏
代码能够 运行 正确。
但是如果我删除 for (int[] level : dp) Arrays.fill(level, Integer.MAX_VALUE);
,代码将失败。
为什么代码不能运行,如果我删除for (int[] level : dp) Arrays.fill(level, Integer.MAX_VALUE);
class Solution {
public int calculateMinimumHP(int[][] dungeon) {
int rows = dungeon.length;
int cols = dungeon[0].length;
int[][] dp = new int[rows + 1][cols + 1];
for (int[] level : dp) Arrays.fill(level, Integer.MAX_VALUE);
dp[rows][cols - 1] = 1;
dp[rows - 1][cols] = 1;
for(int i = rows - 1; i >= 0; i--){
for(int j = cols - 1; j >= 0; j--){
int min = Math.min(dp[i][j + 1] , dp[i + 1][j]) - dungeon[i][j];
dp[i][j] = min <= 0 ? 1 : min;
}
}
return dp[0][0];
}
}
使用Integer.MAX_VALUE
的原因与以下行有关:
int min = Math.min(dp[i][j + 1] , dp[i + 1][j]) - dungeon[i][j];
在不知道您的代码的完整逻辑的情况下,很明显,对 Math.min()
的调用试图找到两个点中较小的一个。假设您只将实际游戏数据分配给一个点,那么分配的任何单个值都将显示为最小值。这也假设您永远不会拥有像 Integer.MAX_VALUE
.
因为min(Integer.MAX_VALUE, anything_else) = anything_else
.
因此,在数组中查找最小值的代码应该从 min=MAX_VALUE
开始,假设必须有一个值小于数组中某处的值。
found_min=MAX_VALUE
for (int i=0 ; i<size ; ++i)
found_min = min(arr[i], found_min)
此代码失败的唯一方法是当数组为空时,然后返回的 found_min
将保持 MAX_VALUE
。