题目描述
在一个整数数组上,对于下标为i的整数,如果它大于所有它相邻的整数, 或者小于所有它相邻的整数,则称为该整数为一个极值点,极值点的下标就是i。
输入描述:
第一行是此数组的元素个数k(4<k<80),第二行是k个整数,每两个整数之间用空格分隔。
输出描述:
每个案例输出为n行:每行对应于相应数组的所有极值点下标值,下标值之间用空格分隔。
示例1
输入
3
10
10 12 12 11 11 12 23 24 12 12
15
12 12 122 112 222 211 222 221 76 36 31 234 256 76 76
15
12 14 122 112 222 222 222 221 76 36 31 234 256 76 73
输出
0 7
2 3 4 5 6 10 12
0 2 3 10 12 14
题目解析:找到局部极值,就是比较中间值的左右,是否是凹凸。但是只有首尾两个数字只用比较一次。
代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<iomanip>
#include<map>
#include<set>
#include<vector>
using namespace std;
int main(){
int sum,count,number;
vector<int> vc;
while(cin >> count){
cin >> count;
for(int j = 0;j < count;j++){
cin >> number;
vc.push_back(number);
}
for(int k = 0; k < vc.size() ; k++){
if(k == 0){
if(vc[k] > vc[k+1] || vc[k] < vc[k+1]){
cout << k << " ";
}
}else if(k == (vc.size()-1)){
if(vc[k] > vc[k-1] || vc[k] < vc[k-1]){
cout << k;
}
}else if((vc[k] > vc[k-1] && vc[k] > vc[k+1]) || (vc[k] < vc[k-1] && vc[k] < vc[k+1])){
cout << k << " ";
}
}
cout << endl;
vc.clear();
}
return 0;
}