题目描述
输入 N 个整数,表示股票指数的N个时刻的值,如果有一个时刻的值比前一刻和后一刻的值都 大,就称为一个高峰值,计算共有多少个高峰? 注:第1个和最后一个值不能算高峰。
输入格式
第一行1个整数n,范围在[1,100]。 第二行有n个[1,10000]范围的整数,整数间用一个空格分隔。
输出格式
只一个整数,高峰的个数。
样例输入/输出
输入数据 1
7
7 12 8 8 5 6 4
输出数据 1
2
解题思路:
题目要求计算给定股票指数序列中的高峰值个数。高峰值定义为一个时刻的值比前一刻和后一刻 的值都大,但第一个和最后一个值不能算作高峰值。
解题思路:
-
定义一个整型数组a来存储输入的股票指数序列。
-
使用一个循环将输入的股票指数逐个存入数组a中。
-
使用一个循环遍历数组a的第2个元素到倒数第2个元素,判断是否为高峰值。
-
如果当前元素a[i]比前一元素a[i-1]和后一元素a[i+1]都大,则计数器s加1。
-
循环结束后,输出计数器s的值,即高峰值的个数。
C++代码如下:
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n,a[100+5],s=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=2;i<n;i++)
{
if(a[i]>a[i+1]&&a[i]>a[i-1])
s++;
}
cout<<s;
return 0;
}
复杂度分析:
-
时间复杂度:O(n),其中n为输入的整数个数,需要遍历一次数组a。
-
空间复杂度:O(n),需要使用一个大小为n的数组a来存储输入的整数序列。