GFGhttps://practice.geeksforgeeks.org/problems/subset-sum-problem2014/1
利特科 https://leetcode.com/problems/partition-equal-subset-sum/
问题:给定一个大小为N的数组arr[],检查它是否可以分成两部分,使得两部分中的元素之和相同。
输入:N=4 arr={1,5,11,5}输出:是解释:这两个部分是{1,5,5}和{11}。
class Solution{
public:
static int equalPartition(int N, int arr[])
{
int sum = 0;
for (int i=0; i<N; i++)
sum += arr[i];
if (sum % 2 != 0)
return 0;
sum = sum/2;
int row = N+1;
int col = sum+1;
int dp[row][col];
for (int i=0; i<col; i++)
dp[0][i] = 0;
for (int i=0; i<row; i++)
dp[i][0] = 1;
for (int i=1; i<row; i++) {
for (int j=1; j<col; j++) {
if ( j< arr[i-1])
dp[i][j] = dp[i-1][j];
else{
if(j-arr[i-1] > 0){
dp[i][j] =max(dp[i-1][j], dp[i-1][j-arr[i-1]]);
}
else{
dp[i][j] = dp[i-1][j];
}
}
}
}
return dp[row-1][col-1];
}
};
所以我出于好奇注册了门户网站,想知道出了什么问题。我能够使用以下代码得到正确的答案。代码进行了轻微的更改,主要是空间压缩。
正如我所怀疑的,N
(100)和数组
(1e5)中的值之和的约束是导致分割错误的关键。
也代替j-arr[i-1]
空间压缩说明:
我们只需要第< code>i-1
个状态来计算当前状态< code>i的值,因此每个大小为< code>sum的2个数组就足够了。我保留了一个引用< code>curr来记住2个数组中的哪一个被认为是当前的,而curr^1
将是前一个数组。我们可以进一步优化到大小为< code>sum的单个数组,但这超出了答案的范围。
int equalPartition(int N, int arr[])
{
int sum = 0;
for (int i=0; i<N; i++)
sum += arr[i];
if (sum % 2 != 0)
return 0;
sum = sum/2;
int row = N+1;
int col = sum+1;
int dp[2][col]; // change 1
for (int i=0; i<col; i++)
dp[0][i] = 0;
// for (int i=1; i<row; i++)
// dp[i][0] = 1;
dp[0][0] = 1; // change 2, due to space compression don't need above
int curr = 1; // change 3
for (int i=1; i<row; i++, curr^=1) { // change 4
for (int j=1; j<col; j++) {
dp[curr][j] = dp[curr^1][j]; // change 5
if(j-arr[curr^1] >= 0) // change 6
dp[curr][j] =max(dp[curr][j], dp[curr^1][j-arr[i-1]]); // change 7
}
}
return dp[curr^1][col-1]; // change 8
}
};
我的代码: 错误: 第8行的错误1064(42000):您的SQL语法中有一个错误;请查看与您的MySQL服务器版本相对应的手册,以便在第9行')'附近使用正确的语法
假设我们有以下三个类: 这将产生以下错误: 既然是整数,为什么它不选择类型?
我正在使用这个卡佩吉斯节点应用程序:https://github.com/narainsagar/node-casperjs-aws-lambda 我已经让我的代码在本地工作,并上传到Lambda,但我需要将我的代码包装在里面exports.handler这样我就可以从API网关向函数传递数据。(我已经对不使用这个应用程序的其他函数这样做了。)当我将代码放在里面时exports.handler失败
这段代码是我用Java Swing制作的Tic-Tac-Toe程序的一部分。为什么在添加用于添加按钮的for语句时返回NullPointerException?
当我执行时 在控制台(javascript)中,它通过类名返回元素,但是当我执行时: < code > driver . find elements(by . class name(" jobs-company-card _ _ content-wrapper ")); 结果(元素)是一个空的列表,注意返回
我运行这段代码的时候,点击部件就会出现 Uncaught TypeError: Cannot read properties of undefined (reading 'position')at VertexEnumerator.js:87:28 这样的错误