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