描述
如果乙個數列至少有三個元素,並且任意兩個相鄰元素之差相同,則稱該數列為等差數列。
例如,以下數列為等差數列:
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示例:
a = [1, 2, 3, 4]好晚了。。。返回: 3, a 中有三個子等差陣列: [1, 2, 3], [2, 3, 4] 以及自身 [1, 2, 3, 4]。
直接貼**吧,兩種思想
法1
class
solution
:'''
方法:1. 初始化乙個list 將每項初始化為相鄰兩項差
2. 查詢至少有連續兩項差相同的list子陣列個數
3. 計算等差子陣列個數
'''defnumberofarithmeticslices
(self, a:
list)-
>
int:
d =for i in
range(1
,len
(a))
:# 初始化為兩項的差值
d +=
[a[i]
- a[i -1]
]0.1
)# 用來保證後面資料全部錄入
cal_list =
cal =
1for i in
range(1
,len
(d))
:if d[i]
== d[i -1]
: cal +=
1else
: cal =
1 ans =
0for temp in cal_list:
ans +=(1
+ temp -1)
*(temp -1)
/2return
int(ans)
法2class
solution
:def
numberofarithmeticslices
(self, a)
:"""
方法2:
:type a: list[int]
:rtype: int
"""n=
len(a)
dp=[0
]*nfor i in
range(2
,n):
if a[i]
-a[i-1]
==a[i-1]
-a[i-2]
: dp[i]
=dp[i-1]
+1return
sum(dp)
class solution
};
還是簡答的解釋一下吧,首先python的第乙個就不解釋了,感覺比較好理解
第二種演算法思想用了乙個簡單的規律,比如有乙個等差數列a, b, c, d
當c - b == b - c的時候此時等差子數列有1個,當再加入乙個元素滿足上述關係的時候,注意 會將之前所有長度的子數列個數加1並且再加上乙個最長的子數列,所以dp演算法是上一項再加上1。
力扣 動態規劃
設爬x層的梯子的方法有f x 種,那麼f x f x 1 f x 2 爬1層梯子的方式有一種 爬2層梯子的方式有兩種 爬3層梯子的方式有三種 爬4層梯子的方式有五種 classsolution int rev newint n 1 rev 0 0 rev 1 1 rev 2 2 for inti 3...
力扣 動態規劃 最低票價
問題描述 在乙個火車旅行很受歡迎的國度,你提前一年計劃了一些火車旅行。在接下來的一年裡,你要旅行的日子將以乙個名為 days 的陣列給出。每一項是乙個從 1 到 365 的整數。火車票有三種不同的銷售方式 一張為期一天的通行證售價為 costs 0 美元 一張為期七天的通行證售價為 costs 1 ...
力扣 動態規劃 不同路徑
描述 乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 100。...