LeetCode-413. Arithmetic Slices

网友投稿 791 2022-08-25

LeetCode-413. Arithmetic Slices

LeetCode-413. Arithmetic Slices

​​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, 97, 7, 7, 73, -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.

题解:dp问题。dp[i-1]为i-1前的连续等差数列中长度为3的子数列个数,然后每当A[i]加入后,判断与前者是否为等差,动态更新dp[i]。而0-n的连续等差子数列为dp[0]-dp[n-1]之和。

class Solution {public: int numberOfArithmeticSlices(vector& A) { int n = A.size(), ans = 0; vector dp(n, 0); if (n < 3){ return 0; } for (int i = 2; i < n; i++){ if (A[i] - A[i - 1] == A[i - 1] - A[i - 2]){ dp[i] = dp[i - 1] + 1; } ans += dp[i]; } return ans; }};

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:LeetCode-70. Climbing Stairs
下一篇:LeetCode-198. House Robber
相关文章

 发表评论

暂时没有评论,来抢沙发吧~