ให้ n, lower, upper หา List ความยาว n เพิ่มขึ้นเข้มงวดแล้วลดลงเข้มงวด ค่าอยู่ใน [lower, upper] ทั้งสองส่วนต้องไม่ว่าง หา List เรียงเล็กซิโคกราฟิกมากที่สุด
ตัวอย่าง: n=5, lower=3, upper=7 → [6,7,6,5,4]
[7,6,5,4,3] ไม่ถูก เพราะส่วนเพิ่มว่าง
ขั้นตอน
- ถ้า
n > 2*(upper-lower)+1: ไม่เป็นไปได้ →[] c = upper - lowerd = 1ถ้าc < n:d = n - c - 1- สร้างส่วนเพิ่ม:
range(upper-d, upper) - สร้างส่วนลด:
range(upper, upper-n+d, -1) - รวมทั้งสองส่วน
ตัวอย่างโค้ด
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)) # Output: [6, 7, 6, 5, 4]อินพุต
5, 3, 7
เอาต์พุต
[6, 7, 6, 5, 4]