最長(zhǎng)重復(fù)子數(shù)組

718. 最長(zhǎng)重復(fù)子數(shù)組

import kotlin.math.max

class FindLength {
    /*
    * 給兩個(gè)整數(shù)數(shù)組 A 和 B ,返回兩個(gè)數(shù)組中公共的、長(zhǎng)度最長(zhǎng)的子數(shù)組的長(zhǎng)度。
      示例:
      輸入:
      A: [1,2,3,2,1]
      B: [3,2,1,4,7]
      輸出:3
      解釋?zhuān)?      長(zhǎng)度最長(zhǎng)的公共子數(shù)組是 [3, 2, 1] 。
    * */
    /*
    * 動(dòng)態(tài)規(guī)劃 另一種思路是滑動(dòng)窗口 也比較簡(jiǎn)單
    * dp方程
    * 如果當(dāng)前i和j對(duì)應(yīng)的數(shù)相等 則結(jié)果等于前一個(gè)結(jié)果+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) {
                    //結(jié)尾一樣 則前一個(gè)+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)))
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容