1.描述
求一个数组最大递减子数组,要求返回数组,比如[9,2,5,4,3]返回[9,5,4,3]
2.代码
def solve(arr):
dp = [0] * len(arr)
pre = [-1] * len(arr)
max_len = 1
max_index = 0
for i in range(len(arr)):
dp[i] = 1
for j in range(i):
if arr[j] > arr[i] and dp[j] + 1 > dp[i]:
dp[i] = dp[j] + 1
pre[i] = j
if dp[i] > max_len:
max_len = dp[i]
max_index = i
res = []
res.append(arr[max_index])
while pre[max_index] != -1:
res.append(arr[pre[max_index]])
max_index = pre[max_index]
return max_len, res[::-1]
arr = [9, 2, 5, 4, 3]
max_len, res = solve(arr)
print(max_len, res)
- 结果
4 [9, 5, 4, 3]