求解波值的波峰和波谷「JavaScript」-150224下折价是多少
#头条创作挑战赛#
本文同步本人掘金平台的文章:https://juejin.cn/post/7143782444708134948
So,这篇文章,我们来谈谈,在一系列的电波数据中,我们应该怎么求解这一系列的数据的波峰和波谷呢?
Now,我们有一系列的数据 [150, 230, 224, 218, 135, 147, 260] 来举例:
在这 7 个数据中,波峰是 230 和 260,波谷是 150 和 135。
PS:本文中知识点会应用到我的下一篇文章中
Ok,那么我们应该如何通过代码来查找这些波峰和波谷呢?
思路
我们可以考虑如下的实现方式:
逐个遍历整个数组
设定数据是波峰记录为 1,数据是波谷记录为 -1,也就是 direction 为 1 | -1
(后一个数据 - 当前数据)* direction 是大于零的时候,对波峰波谷进行判断并累计统计
对数组第一个数据 arr[0] 和数组最后一个数据 arr[arr.length - 1] 进行判断
实现
思路我们有了,那么,我们来进行代码实现,这里我采用了 Javascript 语言进行编写:
function getCrestAndTrough(arr) { // arr 是一维数组,且元素类型是数字
let crestCount = 0; // 波峰计数
let crestArr = []; // 波峰值
let troughCount = 0; // 波谷计数
let troughArr = []; // 波谷值
// 从右往左遍历
let j = arr.length, // 数组长度
i = j - 1,
last, // 上一个元素的值
current, // 当前元素的值
next, // 下一个元素的值
difference; // 下一个元素对当前元素的差值
let direction = arr[j] < 0 ? -1 : 1; // 假设是波峰的方向 1
while(arr[i]) {
next = arr[i - 1]; // 下一个元素
current = arr[i]; // 当前元素
difference = next - current; // 差值
if(difference * direction > 0) {
direction *= -1;
if(direction === 1) {
crestCount += 1; // 波峰
crestArr.push(current);
} else {
troughCount += 1; // 波谷
troughArr.push(current);
}
last = current;
} else if(i === j - 1 && current !== next) { // 如果开始时候是曲线向下走的趋势,则 direction = 1 成立,最右年的点是波峰点
crestCount += 1; // 波峰
crestArr.push(current);
}
// 最左侧点判断
if(next == undefined) {
if(last < current) {
crestCount += 1; // 波峰
crestArr.push(current);
}
if(last > current) {
troughCount += 1; // 波谷
troughArr.push(current);
}
// 如果两点相等,则什么都不用做
}
i--; // 跳出循环的关键点
}
console.log(`波峰 => ${ crestArr },波谷 => ${ troughArr }`)
}
复制代码
上面的代码已经讲解得很详细,读者跟着代码一步步读下来,应该很容易理解。
下面我们来验证下时候正确。我们依旧是拿数据 [150, 230, 224, 218, 135, 147, 260] 来进行验证:
let array = [150, 230, 224, 218, 135, 147, 260];
getCrestAndTrough(array);
// 波峰 => 260,230,波谷 => 135,150
复制代码
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 931614094@qq.com 举报,一经查实,本站将立刻删除。