簡體   English   中英

為什么我在矩陣中填充 Integer.MAX_VALUE

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM