leetcode-413. 等差数列划分---python
Posted 大聪明Smart
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-413. 等差数列划分---python相关的知识,希望对你有一定的参考价值。
如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。
例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。
给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。
子数组 是数组中的一个连续序列。
示例 1:
输入:nums = [1,2,3,4]
输出:3
解释:nums 中有三个子等差数组:[1, 2, 3]、[2, 3, 4] 和 [1,2,3,4] 自身。
示例 2:
输入:nums = [1]
输出:0
提示:
1 <= nums.length <= 5000
-1000 <= nums[i] <= 1000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/arithmetic-slices
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
定义状态:dp[i]表示从nums[0]到nums[i]且以nums[i]为结尾的等差数列子数组的数量。
状态转移方程:dp[i] = dp[i-1]+1 if nums[i]-nums[i-1]==nums[i-1]-nums[i-2] else 0
解释:如果nums[i]能和nums[i-1]nums[i-2]组成等差数列,则以nums[i-1]结尾的等差数列均可以nums[i]结尾,且多了一个新等差数列[nums[i],nums[i-1],nums[i-2]]
代码
class Solution:
def numberOfArithmeticSlices(self, nums: List[int]) -> int:
dp = [0 for i in range(len(nums))]
for i in range(2, len(nums)):
dp[i] = dp[i-1] + 1 if nums[i] - nums[i-1] == nums[i-1] - nums[i-2] else 0
return sum(dp)
执行结果:
通过
显示详情
添加备注
执行用时:
32 ms
, 在所有 Python3 提交中击败了
68.24%
的用户
内存消耗:
15 MB
, 在所有 Python3 提交中击败了
91.17%
的用户
通过测试用例:
15/15
以上是关于leetcode-413. 等差数列划分---python的主要内容,如果未能解决你的问题,请参考以下文章
(Java) LeetCode 413. Arithmetic Slices —— 等差数列划分
leetcode 413. 等差数列划分(Arithmetic Slices)