定义大小 (n*m) 的 2d 数组时运行时错误 >=10^6

Run time error while defining 2d array of size(n*m) >=10^6

本文关键字:gt 运行时错误 数组 2d 定义      更新时间:2023-10-16

这是对hackerrank上的问题的答案。下面给出的代码在我的PC中正常工作。但是,当我在hackrrank上在线运行时,它给了我" 运行时错误"。

最初,我认为这是由于2D阵列的大尺寸( l [] [] [] [] sum [] [] )。因此,在阅读大型2D阵列后,它们使它们脱离功能,从而给出了分割故障。仍然在hackerrank上显示运行时间错误。

    #include <stdio.h>
    #include <string.h>
    #include <bits/stdc++.h>
    using namespace std;
    #define MAX_VALUE 10000
    // A utility function to get max of two integers
    int max (int x, int y) { return (x > y)? x : y; }
     int L[MAX_VALUE][MAX_VALUE]; // Create a table to store results of subproblems
     int sum[MAX_VALUE][MAX_VALUE];
    int lps(char *str,int n)
    {
    /*int n = strlen(str);*/
    int i, j, cl;
    // Strings of length 1 are palindrome of lentgh 1
    for (i = 0; i < n; i++)
        {L[i][i] = 1; }
    for (i = 0; i < n; i++)
        {
            for (int j = 0; j < n; ++j)
            sum[i][j]=0;
        }
         for (j=1; j<=n; j++)
        {
          for (i=j-1; i>=0; i--)
          {
            if (str[i] == str[j] && i == j-1)
              {L[i][j] = 2; sum[i][j] = 2*(int) str[i];}
            else if (str[i] == str[j])
              {L[i][j] = L[i+1][j-1] + 2; sum[i][j] = sum[i+1][j-1] + 2*(int)str[i]; }
            else
              {L[i][j] = max(L[i][j-1], L[i+1][j]); sum[i][j] = max(L[i][j-1], L[i+1][j]) == L[i][j-1]?sum[i][j-1]:sum[i+1][j];}
          }
        }
        return sum[0][n-1];
    }

    int main()
    {
        char seq[MAX_VALUE];
        int n; cin>>n;
        for (int i = 0; i < n; ++i)
                cin>>seq[i];
       // int n = strlen(seq);
        cout<<lps(seq,n);
        return 0;
    }

尝试此

int hourglassSum(vector<vector<int>> arr)
{
 int r=6,c=6;
 int i,j;
 int sum;
 int temp;
 int max=-100;
  for(i=0;i<r-2;i++)
  {
    for(j=0;j<c-2;j++)
    {
      sum=(arr[i][j]+arr[i][j+1]+arr[i][j+2])+(arr[i+1][j+1])+(arr[i+2][j]+arr[i+2][j+1]+arr[i+2][j+2]);
      if(max<sum)
      max=sum;
  }
  
 }
 return max;
}