代码似乎不适用于较大的输入,但适用于较小的输入

时间:2017-06-29 10:10:23

标签: c++ arrays c++11

在解决this question时,我的代码似乎不适用于像100000这样的较大输入,但似乎适用于较小的输入。

以下是代码:

int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */ 
long long int n, h;
cin>>n;
long long int count=0;
long long int i,j;
long long int arr[n];
for(i=0;i<n;i++)
{
    cin>>arr[i];
    //cout<<arr[i]<<" ";
}
h = arr[0];
for(i=0;i<n;i++)
{
    if (arr[i]>=h)
    {
        h=arr[i];
        for(j=i;j<n;j++)
        { if (arr[j]<h)
                count++;
        }       


    }
}
cout<<(n-count);
//cout<<h;    
return 0;
}

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:2)

首先,VLA(arr[n])在C ++中是非标准的。其次,在支持它们的地方(例如,作为g ++中的语言扩展),它们通常存储在具有有限大小的堆栈中,因此您很可能遇到... 堆栈溢出。解决方案:使用适当的C ++容器(例如std::vector)而不是VLA,例如改变:

long long int arr[n];

为:

std::vector<long long int> arr(n);

(不要忘记#include <vector>)。