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ù)。