根据偏好和阈值输出数字列表

Output list of numbers based on preference and threshold

我正在寻求帮助以找到合适的算法。

这是我的问题:

我有三组号码。每个集合代表一个偏好,由 n 个变量组成。我想遍历所有集合中的所有变量,并从最大可能的集合中输出落在给定阈值范围内的变量列表。

第 1 组:首选 第 2 组:第二首选 第 3 组:最后的手段。

阈值:50

示例 1:

set 1: 100, 110, 120
set 2: 60, 70, 151
set 3 10, 20, 30

应该输出: 110, 120 取自集合 1。不应包括 100,因为总体最高数字 (151) 之间的差异超过阈值 50

示例 2:

set 1: 100, 110, 120
set 2: 100, 120, 161
set 3: 40, 50, 60

应该输出: 120 取自集合 1。100、110 不应包括在内,因为它们与 161 之间的差异大于 50 的阈值。

示例 3:

set 1: 100, 110, 120
set 2: 151, 161, 100
set 3: 110, 120, 130

应该输出: 120 尽管 151 和 161 比组 1 中的所有数字都高,但仍有一个数字在 50 的阈值内,即 120

示例 4:

set 1: 100, 110, 120
set 2: 151, 161, 200
set 3: 130, 140, 150

应该输出: 151, 161, 200

最后一个例子:

set 1: 100, 110, 120
set 2: 151, 161, 171,
set 3: 100, 200, 300

应该输出: 200, 300

100 未被选中,因为它小于最高数字 (300) 的阈值,即使它在同一组中也是如此。

非常感谢任何帮助。

谢谢!

这个问题不是特别微妙,不需要任何特定的数据结构。

  • 求最大元素;
  • 找出第一个集合中maximum - threshold以上的元素;
  • 如果您在上一步至少找到了一个元素,return找到的元素;
  • 否则,重复第二组;然后是第三组。

python中的示例:

def find_preferred_numbers(s1, s2, s3, threshold=50):
    m = max(max(s1), max(s2), max(s3)) - threshold
    for s in (s1, s2, s3):
        results = [x for x in s if x >= m]
        if len(results) > 0:
            return results
    return []

examples = [
[[100, 110, 120],
[60, 70, 151],
[10, 20, 30]],

[[100, 110, 120],
[100, 120, 161],
[40, 50, 60]],

[[100, 110, 120],
[151, 161, 100],
[110, 120, 130]],

[[100, 110, 120],
[151, 161, 200],
[130, 140, 150]],

[[100, 110, 120],
[151, 161, 171],
[100, 200, 300]]
]

for i, (s1,s2,s3) in enumerate(examples, start=1):
    result = find_preferred_numbers(s1,s2,s3)
    print('example {}: {}'.format(i, result))

# example 1: [110, 120]
# example 2: [120]
# example 3: [120]
# example 4: [151, 161, 200]
# example 5: [300]