我在最小子集问题中做错了什么?
What am I doing wrong in Minimum Subset problem?
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 只能容纳对象,不能容纳原始类型。因此,它应该是 -
ArrayList<Boolean> v = new ArrayList<Boolean>();
Math.min() 可以有下面提到的四个声明之一。您代码中的 v[i] 将 return 布尔值,操作结果 2*v[i]
无效。因此您会看到错误。
Math.min(int, int) Math.min(long, long) Math.min(float, float) Math.min(double, double)
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 只能容纳对象,不能容纳原始类型。因此,它应该是 -
ArrayList<Boolean> v = new ArrayList<Boolean>();
Math.min() 可以有下面提到的四个声明之一。您代码中的 v[i] 将 return 布尔值,操作结果
2*v[i]
无效。因此您会看到错误。Math.min(int, int) Math.min(long, long) Math.min(float, float) Math.min(double, double)