【问题标题】:longest increasing subarray in recursive method using python使用python的递归方法中最长递增子数组
【发布时间】:2021-07-13 04:49:06
【问题描述】:

我尝试不使用递归方法解决这个问题

def findLongest():
    nums=[1, 9, 3, 10, 4, 20, 2]
    f = c = lastMax = p1 = 0

    while (p1 < len(nums) - 1):
        p2 = p1 + 1
        while (p2 < len(nums) - 1):
            if nums[p2] > nums[p1]:
                c += 1
                if f == 0:
                    f = 1
                    p1 = p2
            p2 += 1

        if c > lastMax:
            lastMax = c
            f = 0
            c = 0
        p1 += 1
    return lastMax

我已经在网上搜索了很多,以找到一种很好且易于理解的递归方法。

【问题讨论】:

  • 您是否要查找列表中按递增顺序排列的最长序列的长度?您的代码产生 3,而正确答案是 2。
  • 是的,这就是我想要做的

标签: python recursion dynamic-programming


【解决方案1】:

这会找到列表中最长的单调递增子序列的长度。这不是一个适合递归解决的问题。

def findLongest(nums):
    last = 99999999
    maxSeq = 0
    for n in nums:
        if n > last:
            seq += 1
            if seq > maxSeq:
                maxSeq = seq
        else:
            seq = 1
        last = n
    return maxSeq
print( findLongest([1, 9, 3, 10, 4, 20, 2]))

这是一个递归版本。

def find1(last, nums, n):
    if nums and nums[0] > last:
        return find1(nums[0], nums[1:], n+1 )
    else:
        return n

def findRecursive(nums):
    maxseq = 0
    for i in range(len(nums)):
        n = find1(nums[i], nums[i+1:], 1)
        if n > maxseq:
            maxseq = n
    return maxseq

print( findRecursive([1, 9, 3, 10, 4, 20, 2]))

【讨论】:

  • 谢谢它有效..为什么不能递归地解决这个问题?我找到了这个链接,但老实说不明白codereview.stackexchange.com/questions/102232/…
  • 我没有说不能做,我说这不自然,这正是评论者在该链接中所说的。作为迭代解决方案,它更有意义。
  • 谢谢。我想我看到递归方法看起来不自然。
猜你喜欢
  • 2021-12-04
  • 2012-11-26
  • 1970-01-01
  • 2018-05-19
  • 2014-03-14
  • 2017-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多