[LeetCode]128. Longest Consecutive Sequence

128. Longest Consecutive Sequence

题意:给定一个未排序的数组,计算数组中的数字构成连续的最大个数。

动态规划

假定dp[i]表示从开始到当前位置的最长连续个数。

分析:如果遇见下一位比当前值要大1的值,则个数加一,如果是相等,则继续使用之前的值,如果都不符合,则重置为1。

状态方程:

dp[i] = dp[i-1] + 1 (if dp[i] - dp[i-1] == 1)
dp[i] = dp[i-1] (if dp[i] == dp[i-1])
dp[i] = 1 (else)
class Solution(object):
    def longestConsecutive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if not nums:
            return 0
        nums.sort()
        dp = [0] * len(nums)
        dp[0] = 1
        res = 1
        for i in range(1, len(nums)):
            if nums[i] - nums[i - 1] == 1:
                dp[i] = dp[i - 1] + 1
            elif nums[i] == nums[i-1]:
                dp[i] = dp[i-1]
            else:
                dp[i] = 1
            res = max(res, dp[i])
        return res
posted @ 2017-08-20 15:06  banananana  阅读(101)  评论(0编辑  收藏  举报