gpt4 book ai didi

c++ - 为什么这段代码在 leetcode 运行良好,但在 geeksforgeeks 出现段错误?

转载 作者:行者123 更新时间:2023-12-03 07:02:05 26 4
gpt4 key购买 nike

gfg https://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) 和 array 中的值的总和(1e5)非常关键导致段错误。
也代替 j-arr[i-1] > 0 ,应该是j-arr[i-1] >= 0 .
空间压缩说明:
我们只需要i-1计算当前状态值的状态 i ,所以 2 个大小为 sum 的数组每个都足够了。我保留了一个引用 curr记住 2 个数组中的哪一个被视为当前数组和 curr^1将是前一个数组。我们可以进一步优化到大小为 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
}
};

关于c++ - 为什么这段代码在 leetcode 运行良好,但在 geeksforgeeks 出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64532212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com