LeetCode - 1218 解題紀錄
題目: LeetCode - 1218. Longest Arithmetic Subsequence of Given Difference
題目說明
給一個陣列和一個整數 difference,求差為 difference 之最長等差子序列長度。
解題思路
明顯 DP 題,dp[i] 表以 arr[i] 結尾之最長子序列長度,雙迴圈 i, j 遍歷,j 為 0 ~ i - 1,若 arr[j] - arr[i] 為 difference 表 arr[j] 是可以接在以 arr[i] 為結尾之最長子序列後面,轉移方程為 dp[i] = max(dp[j] + 1, dp[i]);,但這個做法會超時。
上網參考後發現由於這題給定 difference 了,因此當遍歷到 arr[i] 時只需要看 arr[i] - difference 這個數字是否出現過即可,dp[n] 表示以 n 結尾之最長子序列長度,轉移方程為 dp[n] = dp[n - difference] + 1;。
參考解法
TLE
1 | class Solution { |
1 | class Solution { |
參考資料
[LeetCode] 1218. Longest Arithmetic Subsequence of Given Difference 最长定差子序列 - Grandyang - 博客园
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Larry's notes!
評論