46分,大佬们教教该怎么改

P1567 统计天数

你这样就把原来的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


|