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]
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP