python 等差数列_413. 等差数列划分(Python)
題目
難度:★★☆☆☆
類型:數組
方法:動態規劃
力扣鏈接請移步本題傳送門
更多力扣中等題的解決方案請移步力扣中等題目錄
如果一個數列至少有三個元素,并且任意兩個相鄰元素之差相同,則稱該數列為等差數列。
例如,以下數列為等差數列:
1, 3, 5, 7, 9
7, 7, 7, 7
3, -1, -5, -9
以下數列不是等差數列。
1, 1, 2, 5, 7
數組 A 包含 N 個數,且索引從0開始。數組 A 的一個子數組劃分為數組 (P, Q),P 與 Q 是整數且滿足 0<=P
如果滿足以下條件,則稱子數組(P, Q)為等差數組:
元素 A[P], A[p + 1], ..., A[Q - 1], A[Q] 是等差的。并且 P + 1 < Q 。
函數要返回數組 A 中所有為等差數組的子數組個數。
示例:
A = [1, 2, 3, 4]
返回: 3, A 中有三個子等差數組: [1, 2, 3], [2, 3, 4] 以及自身 [1, 2, 3, 4]。
解答
看到按照規律統計子數組個數這一類的問題,很快地可以想到用動態規劃來解決。
定義數組dp,維度與輸入A一致,dp[i]表示以A[i]結尾的等差子數組的個數,dp數組中的元素全部初始化為零,因為以Ai結尾的等差子數組的個數最少為零。
從第三個數字開始遍歷數組,如果遇到以該數組結尾的連續三個元素是等差的,那么說明發現新的等差子數組,或者原有的等差子數組繼續延長。這時,以A[i]結尾的等差數組的個數為以A[i-1]結尾的等差子數組的個數加一,簡單的例子就可以說明??梢垣@得遞推關系式:
dp[i] = dp[i-1] + 1
最終,返回dp數組中所有元素和即可。
class Solution:
def numberOfArithmeticSlices(self, A):
dp = [0 for _ in range(len(A))]
for i in range(2, len(A)):
if A[i] - A[i - 1] == A[i - 1] - A[i - 2]:
dp[i] = dp[i - 1] + 1
return sum(dp)
如有疑問或建議,歡迎評論區留言~
有關更多力扣中等題的python解決方案,請移步力扣中等題解析
總結
以上是生活随笔為你收集整理的python 等差数列_413. 等差数列划分(Python)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可调恒流驱动LED电路分析
- 下一篇: 《三天给你聊清楚redis》第1天先唠唠