怎么找出趋势递减数列(并非绝对递减)中的异常元素?

  1. 给出一个趋势递减数列,找出其中的异常元素
  2. 数列在整体大的趋势上是递减,但是存在后一个元素比前一个元素稍大一点的情况(算作正常)
  3. 数列中存在连续的 N 个异常元素,第一个异常元素前面附近元素最后一个异常元素后面附近元素远小于该 N 个异常元素的最小值
  4. 对于上述描述中的 稍大附近元素远小于等词汇,如需精确数值,请自行定义
  • 例如 50,51,45,40,200,39,30,20 中的 200
  • 例如 50,52,40,40,150160150,41,38 中的 150160150
  • 例如 652,638,642,18291829182918291829,639,587,577,550 中的 5 个 1829
阅读 2.6k
2 个回答

这个其实很简单的,写个循环就找出来了嘛。

function findAscElement(list) {
  let normalIndex // 保存最后正常的索引
  let result = []
  for (let idx in list) {
    if (idx == 0) {
      normalIndex = idx
      continue
    }
    // 遍历与最后正常的索引值对比
    if (list[idx] > list[normalIndex]) {
        result.push(idx)    
    } else {
      normalIndex = idx
    }
  }
  return result
}

let list = [100, 99, 90, 91, 92, 89, 11]
console.log(findAscElement(list))

主要是定义一下容忍度,就是递减趋势中,允许多大范围的跳变,后面比前面的大的范围,1倍还是2倍以内,还是比数列前一个不能大于百位,或千位,或是不能超过目前数列出现的最大值,比如第一个元素为参考,定义好这个容忍度判断,就比较容易了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题