如何解决Java

时间:2018-10-23 16:04:09

标签: java algorithm dynamic-programming indexoutofboundsexception

我正在解决有关制定算法的挑战。

  

有一场土地大战。   Land of Landing游戏由N行共4行组成,所有列均得分。   从第一行向下一行向下移动时,必须在每行四个正方形之一上向下移动。
  但是,有一个特殊的规则,当一次降落一行时不能在同一行重复。

例如,

| 1 | 2 | 3 | 5 |

| 5 | 6 | 7 | 8 |

| 4 | 3 | 2 | 1 |

如果您已踩过1号线到4号线(5),则无法踩到4号线(8)的2号线。

我试图在Java中使用动态编程。

import java.lang.Math;
import java.util.*;
class Solution {
   int [][] dp = new int[100001][4];

   int solution(int[][] land) {
    int r = land.length;
    for (int i = 0; i < 4; i++)
    {
        dp[0][i] = land[0][i];
    }

    for (int i = 0; i <r; i++)
    {
        for (int j = 0; j < 4; ++j)
        {
            for(int k = 0; k < 4; ++k)
            {
                if (j != k)
                {
                    dp[i][j] = Math.max(dp[i][j], land[i][j] + dp[i-1][k]);
                }
            }
        }
    }
    int ans = 0;
    for (int i = 0; i < 4; ++i)
    {
        ans = Math.max(ans, dp[r-1][i]);
    }
    return ans;
   }
}

显示错误

  

java.lang.ArrayIndexOutOfBoundsException:-1

我当时认为条件语句可能有问题。

在C ++中,这些条件语句是正确的。运行完美。为什么在Java中出现错误? Java和C ++之间使用数组有什么区别吗?

能否请您告诉我如何解决此错误?

1 个答案:

答案 0 :(得分:1)

dp[i-1][k]-i从上循环的零开始,因此该表达式的结果作为索引变为-1。

Java数组索引从零开始,而不是-1,这就是ArrayIndexOutOfBoundsException的原因。

我不知道业务案例,但是解决此问题的一种方法是,首先从1而不是0开始for循环。