找到最大和矩形

时间:2015-05-13 15:02:06

标签: c++ algorithm

我为0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 问题编写了此代码。但它回答了错误的答案。例如,对于此实例,返回0,而正确答案为15.用户首先给出数组大小,然后输入元素。我的错是什么?

实施例

int kadane(int* arr, int* start, int* finish, int n)
{
    int sum = 0, maxSum = INT_MIN, i;
    *finish = -1;
    int local_start = 0;
    for (i = 0; i < n; ++i)
    {
        sum += arr[i];
        if (sum < 0)
        {
            sum = 0;
            local_start = i+1;
        }
        else if (sum > maxSum)
        {
            maxSum = sum;
            *start = local_start;
            *finish = i;
        }
    }
    if (*finish != -1)
        return maxSum;
    maxSum = arr[0];
    *start = *finish = 0;
    for (i = 1; i < n; i++)
    {
        if (arr[i] > maxSum)
        {
            maxSum = arr[i];
            *start = *finish = i;
        }
    }
    return maxSum;
}

void findMaxSum(int** M,int n)
{
    int maxSum = INT_MIN, finalLeft, finalRight, finalTop, finalBottom;
    int left, right, i;
    int* temp=new int[n];
    int sum, start, finish;
    for (left = 0; left <n; ++left)
    {
        memset(temp, 0, sizeof(temp));
        for (right = left; right < n; ++right)
        {
            for (i = 0; i < n; ++i)
                temp[i] += M[i][right];
            sum = kadane(temp, &start, &finish, n);
            if (sum > maxSum)
            {
                maxSum = sum;
                finalLeft = left;
                finalRight = right;
                finalTop = start;
                finalBottom = finish;
            }
        }
    }
    printf("(Top, Left) (%d, %d)\n", finalTop, finalLeft);
    printf("(Bottom, Right) (%d, %d)\n", finalBottom, finalRight);
    printf("Max sum is: %d\n", maxSum);
}

int _tmain(int argc, _TCHAR* argv[])
{
    int N;
    cout<<"enter size of 2d array"<<endl;
    cin>>N;
    int** M;
    M=new int*[N];
    for(int i=0;i<N;i++)
    {
        M[i]=new int [N];
    }

    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            cin>>M[i][j];
        }
    }
    findMaxSum(M,N);
    /*for(int i=0;i<N;i++)
      {
      delete []M[i];
      M[i]=0;
      }
      delete []M;*/
    return 0;
}

代码

dt <- data.table(v1=c(1,2,3) , v2=c("axb","cxxd","exfxgx"))  
dt[ , v3:=gsub("x",v1,v2)]  

1 个答案:

答案 0 :(得分:3)

memset(temp, 0, sizeof(temp));
由于sizef(temp)的计算结果只是指针的大小,因此

没有按预期执行。

将该行替换为:

memset(temp, 0, sizeof(int)*n);

通过这种改变,我的测试中的工作正常。

您也可以使用:

memset(temp, 0, sizeof(*temp)*n);