欢迎访问==> 【考研OR保研】机试题
题目描述
在一个整数数组上,对于下标为 $i$ 的整数,如果它大于所有它相邻的整数, 或者小于所有它相邻的整数,则称为该整数为一个极值点,极值点的下标就是 $i$。
现在给定整数数组,请你找到所有极值点,并输出这些极值点的下标。
输入格式
第一行包含整数 $N$ 表示数组中包含的整数个数。
第二行包含 $N$ 个整数,表示数组中的元素。
数组中的元素的下标依次为 $0 \\sim N-1$。
输出格式
共一行,按从小到大的顺序输出所有极值点的下标。
数据范围
$1 \\le N \\le 100$,
$1 \\le$ 数组中的元素值 $\\le 1000$
输入样例:
10
10 12 12 11 11 12 23 24 12 12
输出样例:
0 7
C++ 代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int n, a[N];
int main()
{
cin >> n;
for(int i = 0; i < n; i ++) cin >> a[i];
//特殊处理第一个数字
if(a[0] != a[1]) cout << 0 << ' ';
//处理中间的数字
for(int i = 1; i < n - 1; i ++)
{
if((a[i] > a[i - 1] && a[i] > a[i + 1]) || (a[i] < a[i - 1] && a[i] < a[i + 1])) cout << i << ' ';
}
//特殊处理最后一个数字
if(a[n - 2] != a[n - 1]) cout << n - 1 << ' ';
return 0;
}
还需要特殊处理一下n=1和n=2