【问题标题】:Find the initial position of the lowest/longest sequence in an array查找数组中最低/最长序列的初始位置
【发布时间】:2018-08-04 04:22:05
【问题描述】:

与睡眠周期警报类似,我需要在可能的最佳位置(我的场景中的低数字)切割我的阵列,同时考虑一系列最小/最大数量的值...

为了简化,如果我能够在一个数组中找到最长的最低序列,我想我可以继续前进。

例如:

[1,2,3,0,1,4,5,6,6,0.1,1.1,2,4]

应该返回 9,因为 0.1 是最长最低的第一个值,即使我的值低于 0.1;

[4,5,7,10,0.13,0.2,0.12,8,9,28,0.1,0.11,0.102]

应该返回 10,因为它小于 1,即使序列具有相同数量的数字...

更长的序列(在我的场景中)比更低的更重要。知道如何开始吗?我没有阈值,但我认为涉及此的解决方案应该没问题(如果即时计算)

【问题讨论】:

  • 当你说“更长的序列”时,你的意思是一个特定的值在数组中按顺序重复(即55是这个数组中的“更长的序列” [44, 44, 55, 55, 55])?
  • 不,更长,因为“低数字”的数量高于其他“低数字”序列
  • 我可以做类似的事情,得到平均值,或者第一个四分位数,低于这个值的所有内容都是“低数字”

标签: python python-3.6


【解决方案1】:

我不确定“最长最低”背后的复杂逻辑,但这可能是一个好的开始:

data = [4,5,7,10,0.13,0.2,0.12,8,9,28,0.1,0.11,0.102]

result = [[0,0]]
threshold = 1.0
for num, val in enumerate(data) :
    if val < threshold :
        if result[-1][1] == 0 :   # start a new sequence
            result[-1][0] = num
            result[-1][1] = 1
        else :                    # continue existing sequence
            result[-1][1] += 1
    else :    # end the previous sequence
        if result[-1][1] > 0 :
            result.append([0,0])

返回(第一个元素,序列长度)对:

[[4, 3], [10, 3]]

你可以进一步分析第一个元素的长度、值或任何你喜欢的东西。

【讨论】:

  • 通过使用num 作为序列索引和i 作为数组元素的值来增加混乱。
  • @rioV8 现在更容易理解了吗?
  • 仍然令人困惑,因为numval 是同一个意思。 ijk 按照惯例用作索引。 for i, val in enumerate(data) : 会更清楚。希望你永远不会看到for (int num=0; num&lt;array.size(); ++num) { ... }
  • 谢谢,我认为没有阈值的解决方案是不可能的,对吧?
  • @Gabrielle 我们在寻找什么没有门槛?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 2013-03-22
  • 2020-02-14
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
相关资源
最近更新 更多