public int minimumOperations(List<Integer> nums) {
    int n = nums.size();
    int[][] dp = new int[n][3];
    for (int i = nums.get(0) - 1; i < 3; i++) {
        dp[0][i] = 1;
    }
    for (int i = 1; i < n; i++) {
        int num = nums.get(i) -1;
        dp[i][0] = dp[i-1][0];
        dp[i][1] = dp[i-1][1];
        dp[i][2] = dp[i-1][2];
        if (num == 0) {
            dp[i][0] += 1;
        } else if (num == 1) {
            dp[i][1] = Math.max(dp[i - 1][0], dp[i - 1][1]) + 1;
        }else{
            dp[i][2] = Math.max(Math.max(dp[i - 1][0], dp[i - 1][1]), dp[i - 1][2]) + 1;
        }
    }
    int max = Math.max(dp[n - 1][0], Math.max(dp[n - 1][1], dp[n - 1][2]));
    return n - max;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.