LeetCode 等差數列劃分

2021-09-13 03:36:34 字數 1468 閱讀 7102

如果乙個數列至少有三個元素,並且任意兩個相鄰元素之差相同,則稱該數列為等差數列。

例如,以下數列為等差數列:

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思路分析:千萬要記住,下標需要連續,比如[num, num, num+ 1]是等差數列,它們三的下標必須連續!!!

如果[1,2,3,4,5,6]是乙個等差數列,則

以[1,2]打頭的[1,2,3],[1,2,3,4],[1,2,3,4,5],[1,2,3,4,5,6],

以[2,3]打頭的[2,3,4],[2,3,4,5],[2,3,4,5,6],

以[3,4]打頭的[3,4,5],[3,4,5,6],

以[4,5]打頭的[4,5,6]都是等差數列

方法二:動態規劃法。dp[i]記錄以元素a[i]結尾的等差數列的個數。

有上面[1,2,3,4,5,6]的示例可知,(由於數列長度需要大於2,所以dp[0] = dp[1] = 0)

dp[2] = dp[1] + 1,因為a[2] - a[1] == a[1] - a[0]

dp[3] = dp[2] + 1,因為a[3] - a[2] == a[2] - a[1] (這裡有些道友可能認為需要判斷以a[2]結尾的步長是否等於以a[3]結尾的等差步長,其實無形之中已經進行了判斷,以a[2]結尾的步長就是a[2] - a[1](如果a[2]找到了等差數列,那麼它的步長必定為a[2] - a[1]),而a[3]結尾的等差步長必定是dp[2] + 1)

如果[1,2,3,4,5,6]是乙個等差數列,則

以a[2]結尾的等差數列 [1,2,3]

以a[3]結尾的等差數列 [1,2,3,4],[2,3,4]

以a[4]結尾的等差數列 [1,2,3,4,5],[2,3,4,5],[3,4,5]

以a[5]結尾的等差數列 [1,2,3,4,5,6],[2,3,4,5,6],[3,4,5,6],[4,5,6]

轉移方程: dp[i] = dp[i - 1] + 1
class solution 

LeetCode 等差數列劃分

如果乙個數列至少有三個元素,並且任意兩個相鄰元素之差相同,則稱該數列為等差數列。陣列 a 包含 n 個數,且索引從0開始。陣列 a 的乙個子陣列劃分為陣列 p,q p 與 q 是整數且滿足 0 p函式要返回陣列 a 中所有為等差陣列的子陣列個數。示例 a 1,2,3,4 返回 3,a 中有三個子等差...

等差數列劃分

一.題目描述 如果乙個數列至少有三個元素,並且任意兩個相鄰元素之差相同,則稱該數列為等差數列。例如,以下數列為等差數列 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...

等差數列劃分

如果乙個數列至少有三個元素,並且任意兩個相鄰元素之差相同,則稱該數列為等差數列。例如,以下數列為等差數列 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 是整...