極端なポイントの添え字を印刷する(北京大学で再テスト)

序文:

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;
}

おすすめ

転載: blog.csdn.net/weixin_44897291/article/details/112789373