在 Python 中查找按字典顺序排列的最大山脉列表的程序
假设我们有三个正数,分别是n、lower和upper。我们必须找到一个长度为n并且严格递增然后严格递减的列表,并且所有数字都在[lower和upper]范围内(包括两个)。并且每个增加和减少的部分都应该是非空的。我们必须找到可能的字典序最大的这样的列表,如果这不可能,则返回空列表。
所以,如果输入像n=5lower=3upper=7,那么输出将是[6,7,6,5,4],如果我们仔细观察,[7,6,5,4,3]无效,因为严格增加的部分应该是非空的。
示例
让我们看下面的实现来更好地理解
def solve(n, lower, upper): if n > 2 * (upper - lower) + 1: return [] c = upper - lower d = 1 if c < n: d = n - c - 1 if d == 0: d = 1 f = list(range(upper - d, upper)) g = list(range(upper, upper - n + d, -1)) return f + g n = 5 lower = 3 upper = 7 print(solve(n, lower, upper))
输入
5, 3, 7输出结果
[6, 7, 6, 5, 4]