📅  最后修改于: 2023-12-03 15:28:44.410000             🧑  作者: Mango
该题目是GATE-CS-2015(套装2)
的第65题,需要编写一个程序,对于输入的整数序列,求出其最长连续子序列的长度。例如,输入为[1, 9, 3, 10, 4, 20, 2]
,则最长连续子序列为[1, 3, 4, 2]
,长度为4
。
使用动态规划来解决该问题。定义一个一维数组dp
,其中dp[i]
表示以序列中第i
个元素结尾的最长连续子序列长度。那么对于第i
个元素,其属于两种情况:
情况1:如果第i
个元素与第i-1
个元素连续,那么它们组成了一个长度为2的连续子序列,此时dp[i]=dp[i-1]+1
。
情况2:如果第i
个元素不与第i-1
个元素连续,那么dp[i]=1
。
最终的最长连续子序列长度就是dp数组中的最大值。
def longest_consecutive_subsequence(arr):
# 初始化dp数组,所有元素都为1
dp = [1] * len(arr)
# 对于第i个元素,如果其与前一个元素连续,那么它们组成了长度为2的连续子序列
# 此时dp[i] = dp[i-1]+1;否则,dp[i]=1
for i in range(1, len(arr)):
if arr[i] == arr[i-1]+1:
dp[i] = dp[i-1] + 1
# 最终的最长连续子序列长度就是dp数组中的最大值
return max(dp)
输入:[1, 9, 3, 10, 4, 20, 2]
输出:4