题解
2023-12-27 21:35:45
发布于:北京
67阅读
0回复
0点赞
怎么全抄我的?那我就来讲一下思路吧。
思路
首先,我们要想:如何达成最小操作次数?
很简单,如果一个最小的数在中间,那么操作次数一定不是最小的,因为操作次数一定会大于这个数组里最大的数。
接着,我们把这个思路优化一下:如果这个数组是一个“山谷”数组,那么输出NO。
山谷数组是什么?就是两边大,中间小的数组。
所以,用for循环枚举不是山谷数组的可能性:
- 上升或平移,如“/”或者“/--”。
- 下降或平移,如“\”或者“\--”。
- “尖脑袋”型,如“^”。
只要满足这三条里任意一条,就是YES,如果都不满足,那么一定是“V”字型的山谷数组,也就是NO。
好啦,接下来我放出部分重要代码,希望大家不要抄袭:
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<n;i++) if(a[i]<a[i+1]) g=true;
for(int i=1;i<n;i++) if(a[i]>a[i+1]) g=true;
for(int i=1;i<n/2;i++) if(a[i]>a[i+1]) g=true;
打字过于匆忙,如有错误,请及时指正,谢谢!
这里空空如也
有帮助,赞一个