在Python中查找字典顺序最大的山脉列表的程序

在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
    • 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]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程