你这样就把原来的a数组给改了
by WZRYWZWY @ 2022-08-24 09:26:41
你在return 0前面加上这一行代码,你就知道a数组的值被改了,影响了后面的判断
for (int i = 1; i <= n; i++)
{
printf("%d ",a[i]);
}
by WZRYWZWY @ 2022-08-24 09:30:33
一开始我改成这样(但时间复杂度太高嘞,会超时):
```cpp
#include <iostream>
int a[1000000],b[1000000];
int main()
{
int n,m,c,i;
for(i=0;i<=1000000;i++)
b[i]=1;
c=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(a[j-1]<a[j])
{
b[i]++;
// ja[j-1]=ja[j];
}
else
{
break;
}
}
}
// for (int i = 1; i <= n; i++)
// {
// printf("%d\n",a[i]);
// }
for(i=1;i<=n;i++)
{
if(c<b[i])
{
c=b[i];
}
}
printf("%d ",c);
return 0;
}
```
你可以去掉一层循环
因为假设有 1 2 3,
你的代码第一次循环会判断1<2,然后在判断1<3;第二次循环判断2<3,太慢了
不如把b当成连续递增的次数,从1开始,如果1<2,b++,否则b重置为1,如果b比最大次数c大,那么最大次数设为b,最后输出c
AC代码:
```cpp
#include <iostream>
int a[1000000];
int main()
{
int n,m,c,i,b=1;
c=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
{
if(a[i]<a[i+1])
{
b++;
// ja[j-1]=ja[j];
}
else b=1;
if(c<b)
{
c=b;
}
}
// for (int i = 1; i <= n; i++)
// {
// printf("%d\n",a[i]);
// }
printf("%d ",c);
return 0;
}
```
by WZRYWZWY @ 2022-08-24 09:49:17
@[corecode](/user/760957)
by WZRYWZWY @ 2022-08-24 09:49:48
@WZRYWZWY懂了,感谢,膜拜大佬(每一步都很清楚,让我知道怎么错了,该怎么改)
by corecode @ 2022-08-24 18:51:58