美文网首页
算法笔记之动态规划

算法笔记之动态规划

作者: 简单一点点 | 来源:发表于2020-07-01 16:58 被阅读0次

LEETCODE 718. 最长重复子数组

问题描述:
给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。

示例 1:
输入:
A: [1,2,3,2,1]
B: [3,2,1,4,7]
输出: 3
解释:
长度最长的公共子数组是 [3, 2, 1]。

解题思路:最长公共子串问题,利用动态规划,A[i:]和B[i:]的公共前缀可以由A[i+1:]和B[i+1:]推出,最后求出所有公共前缀的最大值即为最长公共子数组。

Python代码:

def findLength(self, A, B):
    dp = [[0 for _ in range(len(A))] for _ in range(len(B))]
    max_value = -1
    for i in range(len(B) - 1, -1, -1):
        for j in range(len(A) - 1, -1, -1):
            if i == len(B) - 1 or j == len(A) - 1:
                if B[i] == A[j]:
                    dp[i][j] = 1
                else:
                    dp[i][j] = 0
                
            else:
                if B[i] == A[j]:
                    dp[i][j] = dp[i + 1][j + 1] + 1
                else:
                    dp[i][j] = 0
            if dp[i][j] > max_value:
                    max_value = dp[i][j]
    return max_value

相关文章

  • 4. 动态规划算法

    1. 动态规划算法总结2. 漫画:什么是动态规划?3.算法之动态规划4. 动态规划-算法

  • 2018-11-14

    今天学了动态规划一些知识,着重看了一下动态规划之背包算法(主要是0-1算法和部分算法),关于动态规划的问题重点是建...

  • 算法笔记之动态规划

    LEETCODE 718. 最长重复子数组 问题描述:给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长...

  • Swift 算法实战:动态规划

    Swift 算法实战:动态规划 Swift 算法实战:动态规划

  • 最短路径 之 Floyd 算法

    • 最短路径 之 Dijkstra 算法• 最短路径 之 Bellman 算法 Floyd算法是基于一种动态规划的...

  • 程序员算法基础——动态规划

    程序员算法基础——动态规划 程序员算法基础——动态规划

  • 动态规划

    --tags: 算法,动态规划 动态规划解题 引入:动态规划 和贪心法 都是算法的思想方法 贪心算法——像 第一类...

  • 《算法图解》note 9 动态规划

    这是《算法图解》的第九篇读书笔记,主要内容是动态规划的简介。 1.动态规划定义 动态规划指的是在约束条件下,将问题...

  • 动态规划 Dynamic Programming

    从运筹学和算法的角度综合介绍动态规划 算法分类总结动态规划与静态规划的关系浅析静态规划和动态规划动态规划解非线性规...

  • 算法笔记——动态规划

    记几道典型的动态规划,分析思路 换钱的方法数 问题描述 给定数组arr,arr中所有的值都为正数且不重复。每个值代...

网友评论

      本文标题:算法笔记之动态规划

      本文链接:https://www.haomeiwen.com/subject/kerhqktx.html