给一个数组,求它的最大的波峰波谷的落差。

举例:数组  A={2, 3, 6, 5, 7, 9}, 其中 6 和 9 被看做是波峰,2和5则是波谷。D[2, 6]=4, D[6,5]=1, D=[5,9]=4. 则 Thus, MaxD(A)=4.

想法:波峰不一定是数组中的最大值,他是趋势向下的转折点,波谷也不一定是数组中的最小值,他是趋势向上的转折点。数组中最边上的两个元素比较特殊,他们必然属于转折的部分。如果A[0] < A[1]  则A[0]是波谷,反之则是波峰。

先扫描一次数组,找到其中所有的转折点,然后配对计算出他们的差,取差最大的。

测试数据:

2 3 6 5 7 9
2 3 6 5 7
2 3 6 5 7 9 10

示例程序:

#include <iostream>using namespace std;void scanPeak(int arr[], int length, int* pvlst)
{int i = 0;int curr_peak = 0;int curr_val = 0;bool is_continue = true;for (i = 1; i < length-1; i++){if ((arr[i] < arr[i-1]) && (arr[i] < arr[i+1])){pvlst[i] = -1;}else if ((arr[i] > arr[i-1]) && (arr[i] > arr[i+1])){pvlst[i] = 1;}}if (arr[0] < arr[1])pvlst[0] = -1;else if (arr[0] > arr[1])pvlst[0] = 1;if (arr[length-1] < arr[length-2])pvlst[length-1] = -1;else if (arr[length-1] > arr[length-2])pvlst[length-1] = 1;
}void maxNeighboringPeak(int arr[], int length)
{int i = 0;int * pvlst = NULL;int peak = 0;int vall = 0;int pair = 0;int max = 0;pvlst = new int[length];memset(pvlst, 0, sizeof(int)*length);scanPeak(arr, length, pvlst);for (i = 0; i < length; i++){cout << pvlst[i] << "  ";}cout << endl << endl;for (i = 0; i < length; i++){if (pvlst[i] == 1){peak = i;pair++;}if (pvlst[i] == -1){vall = i;pair++;}if (2 == pair){pair = 0;if (arr[peak]-arr[vall] > max)max = arr[peak]-arr[vall];}}cout << max << endl;delete[] pvlst;pvlst = NULL;
}int main()
{//int arr[6] = {2, 3, 6, 5, 7, 9};//int arr[5] = {2, 3, 6, 5, 7};int arr[7] = {2, 3, 6, 5, 7, 9, 10};int length = sizeof(arr)/sizeof(arr[0]);maxNeighboringPeak(arr, length);cout<<endl;cin >> length;return 0;
}

测试结果:

-1  0  1  -1  0  0  1

5

趣味算法-求波峰波谷最大值相关推荐

  1. 信号识别-波峰波谷二阶差分识别算法

    信号识别-波峰波谷二阶差分识别算法 前言 波峰波谷算法 实际上代码 前言 在图像分析里,投影曲线是我们经常要用到的一个图像特征,通过投影曲线我们可以看到在某一个方向上,图像灰度变化的规律,这在图像分割 ...

  2. 二阶导数求信号波峰波谷算法

    最近在整理提取信号波峰波谷的算法原理,于是,在网上看到了一篇博文(链接见文末),写的比较清楚,方法也不难,就是利用二阶导数来求函数极值的问题,只是对于信号处理来说,这个过程是离散的. 博文中的问题背景 ...

  3. c语言检测正弦波波峰波谷,一种基于波峰波谷检测的计步算法的制作方法

    本发明涉及计步器算法领域,具体是一种基于波峰波谷检测的计步算法. 背景技术: 当今社会,健康越来越受到人们的重视,步行作为人类活动中最基础.最常见.最重要的运动形式,使得深入研究计步算法有着重要的意义 ...

  4. python波峰波谷算法_波动均分算法

    波动均分算法 by leeenx on 2018-01-11 「波动」和「均分」大部分读者朋友是知道的,但看到「波动均分」应该是一头雾水的.其实,这个名词是笔者拼凑出来的. 什么是「波动均分」? 把指 ...

  5. 识别波峰波谷算法_马丁普林格:波峰-波谷演进法

    我们有很多方法来识别趋势,计算机可以轻易地帮助我们实现各种复杂的想法.而在技术允许的条件下,我们还总是有把事物复杂化的倾向.事实也的确如此,目前市面上有无数复杂的方法.指标和程式化黑箱.但很显然,这些 ...

  6. python迭代法求解方程_第一部分:趣味算法入门;第六题牛顿迭代法求一元三次方程的根...

    100个不同类型的python语言趣味编程题 在求解的过程中培养编程兴趣,拓展编程思维,提高编程能力. 第一部分:趣味算法入门:第六题SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键 ...

  7. 分治算法求n个元素的最大值和最小值

    分治算法求n个元素的最大值和最小值 算法思想:         1.将n个数均分为s1和s2         2.分别求解s1和s2的最大值和最小值            s1最大值为max1,s1最 ...

  8. 信号波峰波谷二阶差分识别算法

    1.聊一聊 其实每个人在无助的时候都需要一句"Cry On My Shoulder!" 今天跟大家介绍一种波峰波谷的检测方法,不是很难,不过能够凸显数学在编程算法中的重要作用. 2 ...

  9. 03【C语言 趣味算法】(值得品味的一道题)打鱼还是晒网?结构体的简单应用。函数的应用。判断闰年的应用。求指定日期距1990年1月1日的天数。

    目录 一.指路哦 三.打鱼还是晒网 嘞? 3.1 问题描述 3.2 问题分析 3.3 算法设计 3.4 确定程序框架 3.5 求出指定日期距 1990年1月1日的天数 3.6 完整code 及结果 一 ...

最新文章

  1. python 源码安装教程_python安装步骤
  2. 2018-2019-1 20165226 《信息安全系统设计基础》第8周学习总结
  3. android从放弃到精通第10天 勿忘初心
  4. 项目分发系统-expect
  5. KMM Kotlin expect的几种声明方式
  6. IDEA好用的Servlet模板
  7. jdk1.6集成activemq的2种方式
  8. iQOO Neo6现身安兔兔数据库:高导热稀土散热加入 跑分轻松破百万
  9. qq安全使用NTFS权限设置法
  10. Idea不识别Java项目
  11. 无法加载 MySQL ODBC 5.3 Unicode Driver ODBC 驱动程序的安装例程,因为存在错误代码126.
  12. vue websocket实现消息推送和语音提醒功能
  13. Scala学习视频心得(一)语言特点、伴生对象
  14. 玩法专利获批,发布4年《Beat Saber》为何持续火爆
  15. 利用Web查询文件(.iqy)有效钓鱼
  16. qq/微信联合登录整体流程图!
  17. mac 硬盘未正常推出解决办法
  18. 2.基于holychip(HC89F30xC系列)的使用
  19. Linux常用命令(4)-磁盘管理
  20. 手机通过adb无线连接电脑(Android Studio)的方法

热门文章

  1. Android Telephony主要模块及功能
  2. bios设置对计算机系统的影响吗,bios如何恢复出厂设置_bios恢复出厂设置后对操作系统有影响吗...
  3. html文件转换Excel2016文件,万能文件转换工具(word,excel,powerpiont,PDF,TXT,JPG,HTML互转)...
  4. 基于单片机十字路口交通灯系统(含原理图)-资料
  5. 【GDOI2016模拟4.23】飞机调度
  6. [React Hooks长文总结系列一]初出茅庐,状态与副作用
  7. oracle数据库报错代码,【案例】Oracle数据库dbv检查坏块时报错代码:6106解决办法...
  8. 5G时代的到来,会给生活带来什么改变?
  9. python requests使用http代理
  10. 数据库乐观锁和悲观锁例子和分析