日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Arithmetic Slices

發布時間:2023/12/9 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Arithmetic Slices 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這兩天一直復習動態規劃,就想到leetcode上刷刷題,easy難度的很少,大部分都是medium和hard。本題是第一道DP類型medium難度的題目,但是用其他的方法比如暴力法也可以求解。首先來看題目描述:

A sequence of number is called arithmetic if it consists of at least three elements and if the difference between any two consecutive elements is the same.

For example, these are arithmetic sequence:

1, 3, 5, 7, 9 7, 7, 7, 7 3, -1, -5, -9

The following sequence is not arithmetic.

1, 1, 2, 5, 7

A zero-indexed array A consisting of N numbers is given. A slice of that array is any pair of integers (P, Q) such that 0 <= P < Q < N.

A slice (P, Q) of array A is called arithmetic if the sequence:
A[P], A[p + 1], ..., A[Q - 1], A[Q] is arithmetic. In particular, this means that P + 1 < Q.

The function should return the number of arithmetic slices in the array A.

Example:

A = [1, 2, 3, 4]return: 3, for 3 arithmetic slices in A: [1, 2, 3], [2, 3, 4] and [1, 2, 3, 4] itself.

解題思路:

題目描述的很明確,包含至少三個數的序列,如果差分相等,那么這個序列就叫做arithmetic sequence,在一個數組里統計有多少個滿足條件的序列(切片)。首先試試暴力法。我們固定一個最小長度為3的區間(i, j),如果差分相等,我們就右移j,一直到數組的末尾,滿足條件的話計數加一。需要注意的是如果區間(i, j-1)是arithmetic slice,那么我們末尾加上一個j,如果A[j] - A[j-1] 等于之前的差分值,那么區間(i, j)也屬于arithmetic slice,我們要避免每次判斷都要計算前面的差分。代碼如下:

class Solution(object):def numberOfArithmeticSlices(self, A):res = 0for i in range(len(A)-2):d = A[i+1] - A[i]for j in range(i+2, len(A)):if A[j] - A[j-1] == d:res += 1else:breakreturn res

?當然我們可以用dp算法,令一維dp[i]表示以i結尾的區間有多少個arithmetic ?slice,新添加的元素和前面元素的差,如果等于之前的差值,那么就讓dp[i]加一。代碼如下:

class Solution(object):def numberOfArithmeticSlices(self, A):dp = [0 for i in range(len(A))]res = 0for i in range(2, len(A)):if A[i] - A[i-1] == A[i-1] - A[i-2]:dp[i] = 1 + dp[i-1]res += dp[i]return res

我們可以優化空間復雜度,因為dp的更新只跟上一個元素有關,因此我們用一個變量空間來代替原來的數組。

class Solution(object):def numberOfArithmeticSlices(self, A):dp = 0res = 0for i in range(2, len(A)):if A[i] - A[i-1] == A[i-1] - A[i-2]:dp += 1res += dpelse:dp = 0return res

?



轉載于:https://www.cnblogs.com/nicotine1026/p/7459989.html

總結

以上是生活随笔為你收集整理的Arithmetic Slices的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。