Python程序:查找字典序最大的山脉列表
假设我们有三个正数n、lower和upper。我们需要找到一个长度为n的列表,该列表严格递增,然后严格递减,所有数字都在[lower, upper](包含两端)范围内。并且递增和递减部分都应该是非空的。我们需要找到可能的字典序最大的列表,如果不可能,则返回空列表。
因此,如果输入类似于n = 5 lower = 3 upper = 7,则输出将是[6, 7, 6, 5, 4],如果我们仔细观察,[7, 6, 5, 4, 3] 是无效的,因为严格递增的部分应该是非空的。
为了解决这个问题,我们将遵循以下步骤:
如果 n > 2 * (upper - lower) + 1,则
返回空列表
c := upper - lower
d := 1
如果 c < n,则
d := n - c - 1
如果 d 等于 0,则
d := 1
f := 从 (upper - d) 到 (upper - 1) 的范围创建一个新列表
g := 从 (upper - n + d - 1) 倒序到 upper 的一个新列表
连接 f 和 g 并返回
示例
让我们看看下面的实现以更好地理解
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]
广告