[英]Why do I fill Integer.MAX_VALUE in Matrix
這個問題來自 LeetCode 174. Dungeon Game。
代碼能夠正確運行。
但是如果我刪除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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.