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]

更新於:2021年10月11日

瀏覽量:180

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.