#include <bits/stdc++.h>
using namespace std;
int n, ans = 2;
int a[100005];
int main(){
scanf("%d" ,&n);
for(int i = 1; i <= n; ++i){
scanf("%d" ,&a[i]);
}
for(int i = 2, last = 1; i < n; ++i){
if((a[last] > a[i] && a[i] < a[i + 1]) || (a[last] < a[i] && a[i] > a[i + 1])){
last = i;
ans++;
}
}
printf("%d\n" ,ans);
return 0;
}
大概思路也是求峰和谷,只不过用 last 实现跳过,最后注意加上首位就行。
实测能AC,但是没有特判 n=1,我想请问一下该算法除了没有特判是否存在其他漏洞。