【问题标题】:What am I doing wrong in Minimum Subset problem?我在最小子集问题中做错了什么?
【发布时间】:2021-05-08 07:51:06
【问题描述】:

geeksforgeeks 的代码。

class Solution {

    public int minDiffernce(int arr[], int n) { 
    
        // Your code goes here
        int range = 0;
        for (int i = 0; i < n; i++) {
            range += arr[i];
        }
        boolean[][] dp = new boolean[n+1][range+1];
        for (int i = 0; i <= n + 1; i++) {
            for (int j = 0; j < range + 1; j++) {
                if (i == 0) dp[i][j] = false;
                if (j == 0) dp[i][j] = true;
            }
        }
        
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= range; j++) {
                if (arr[i] <= j){
                    dp[i][j] = dp[i-1][j-arr[i]] || dp[i-1][j];
                }
                else dp[i][j] = dp[i-1][j];
            }
        }
        ArrayList<boolean> v = new ArrayList<boolean>();
        
        for (int i = 0;i < range + 1; i++) {
            if (dp[n][i] == true) v.add(dp[n][i]);
        }
        
        int mini = Integer.MAX_VALUE;
        for (int i = 0; i < range / 2; i++){
            mini = Math.min(mini, range - 2 * v[i]);
        }

        return mini;
    } 
}

它抛出以下错误:

prog.java:53: error: unexpected type
        ArrayList<boolean> v = new ArrayList<boolean>();
                  ^
  required: reference
  found:    boolean
prog.java:53: error: unexpected type
        ArrayList<boolean> v = new ArrayList<boolean>();
                                             ^
  required: reference
  found:    boolean
prog.java:61: error: array required, but ArrayList<<any>> found
            mini = Math.min(mini, range-2*v[i]);
                                           ^

【问题讨论】:

  • 该行应为ArrayList&lt;Boolean&gt; v = new ArrayList&lt;Boolean&gt;();(注意布尔值中的大写B。列表只能包含对象,不能包含布尔、整数等标量类型

标签: java dynamic-programming


【解决方案1】:
  1. ArrayList 只能保存对象,不能保存原始类型。因此,它应该是-

    ArrayList&lt;Boolean&gt; v = new ArrayList&lt;Boolean&gt;();

  2. Math.min() 可以有下面提到的四个声明之一。您的代码中的 v[i] 将返回布尔值,并且操作 2*v[i] 的结果无效。因此您会看到错误。

    Math.min(int, int) Math.min(long, long) Math.min(float, float) Math.min(double, double)

【讨论】:

    猜你喜欢
    • 2021-09-04
    • 2016-08-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多