力扣 動態規劃 等差陣列劃分

2021-09-12 06:51:46 字數 1832 閱讀 1435

描述

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

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

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)

法2
class

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。...