序文:
21.再テストに参加できるかどうかに関係なく、道路に書かれたゴミコードを記録します。もともと「AlgorithmNotes」をかじったのですが、やりすぎたので、Kingway ComputerTestGuideに変更しました。
タイトル説明:
整数配列では、添え字がiの整数の場合、隣接するすべての整数よりも大きいか、隣接するすべての整数よりも小さい場合、その整数は極値と呼ばれ、極値の添え字になります。私です。
説明を入力してください
最初の行はこの配列k(4 <k <80)の要素の数であり、2番目の行はk個の整数であり、2つの整数ごとにスペースで区切られています。
出力の説明:
各ケースの出力はn行です。各行は対応する配列のすべての極値の添え字値に対応し、添え字値はスペースで区切られます。
回答
#include<iostream>
#include<algorithm>
#include<vector>
#include<stdio.h>
using namespace std;
vector<int> find_exm(vector<int> vi) {
//返回极值点向量
vector<int> res;
int temp;
if (vi[0] != vi[1]) {
temp = 0;
res.push_back(temp);
}
for (int i = 1; i < vi.size() - 1; i++) {
if ((vi[i] > vi[i - 1] && vi[i] > vi[i + 1]) || (vi[i] < vi[i - 1] && vi[i] < vi[i + 1])) {
temp = i;
res.push_back(temp);
}
}
if (vi[vi.size()-1] != vi[vi.size()-2]) {
temp = vi.size()-1;
res.push_back(temp);
}
return res;
}
int main()
{
int n,temp;
while (scanf("%d", &n) != EOF) {
vector<int> vi;
vector<int> res;
for (int i = 0; i < n; i++) {
scanf("%d", &temp);
vi.push_back(temp);
}
res = find_exm(vi);
for (int i = 0; i < res.size(); i++)
printf("%d ", res[i]);
printf("\n");
}
return 0;
}