美文网首页
最长重复子数组

最长重复子数组

作者: A邱凌 | 来源:发表于2020-07-18 17:38 被阅读0次

718. 最长重复子数组

import kotlin.math.max

class FindLength {
    /*
    * 给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。
      示例:
      输入:
      A: [1,2,3,2,1]
      B: [3,2,1,4,7]
      输出:3
      解释:
      长度最长的公共子数组是 [3, 2, 1] 。
    * */
    /*
    * 动态规划 另一种思路是滑动窗口 也比较简单
    * dp方程
    * 如果当前i和j对应的数相等 则结果等于前一个结果+1 否则为0
    * */
    fun findLength(A: IntArray, B: IntArray): Int {
        var dp = Array(A.size) { IntArray(B.size) }
        var maxAns = 0
        for (a in A.withIndex()) {
            for (b in B.withIndex()) {
                if (a.value == b.value) {
                    //结尾一样 则前一个+1
                    if (a.index > 0 && b.index > 0) {
                        dp[a.index][b.index] = dp[a.index - 1][b.index - 1] + 1
                    } else {
                        dp[a.index][b.index] = 1
                    }
                    maxAns = max(maxAns, dp[a.index][b.index]);
                } else {
                    dp[a.index][b.index] = 0
                }
            }
        }
        return maxAns
    }
}

fun main() {
    println(FindLength().findLength(intArrayOf(1,2,3,2,1), intArrayOf(3,2,1,4,7)))
}

相关文章

网友评论

      本文标题:最长重复子数组

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