题目描述
李计划来一场穿越瑞士山脉的自行车之旅。
他的旅途共包含 N 个检查点,按照访问顺序编号为 1∼N。
第 i 个检查点的高度为 Hi。
一个检查点是山峰,如果满足:
- 它不是第 1 个或第 N 个检查点。
- 它的高度严格大于紧接其之前的检查点和紧接其之后的检查点。
请帮李找出山峰的数量。
输入格式
第一行包含整数 T,表示共有 T 组测试数据。
对于每组数据,第一行包含整数 N。
第二行包含 N 个整数,其中第 i 个表示 Hi。
输出格式
每组数据输出一个结果,每个结果占一行。
结果表示为 Case #x: y,其中 x 为组别编号(从 1 开始),y 为李的旅途中山峰的数量。
数据范围
$1≤T≤100,$
$1≤Hi≤100,$
$3≤N≤100$
输入样例:
4
3
10 20 14
4
7 7 7 7
5
10 90 20 90 10
3
10 3 10
输出样例:
Case #1: 1
Case #2: 0
Case #3: 2
Case #4: 0
样例解释
示例 1,第二个检查点是山峰。
示例 2,没有检查点是山峰。
示例 3,第二个和第四个检查点是山峰。
示例 4,没有检查点是山峰。
算法1
(暴力枚举) $O(n^2)$
直接暴力出奇迹,每次从同到尾遍历。
如果满足题目中的条件,我们就把答案++。
时间复杂度 $O(n ^ 2)$
C++ 代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;
int n;
scanf("%d", &T);
for(int t = 1; t <= T; t ++)
{
scanf("%d", &n);
int h[110];
for(int i = 0; i < n; i ++) scanf("%d", &h[i]);
int ans = 0;
for(int i = 1; i < n - 1; i ++)
{
if(h[i] > h[i - 1] && h[i] > h[i + 1])
{
ans ++;
}
}
printf("Case #%d: %d\n", t, ans);
}
}