413. Arithmetic Slices

来源:互联网 发布:python serial 模块 编辑:程序博客网 时间:2024/06/06 08:54

    • 题目描述
    • 题意分析
    • 算法分析
    • 具体实现
    • 复杂度分析


题目描述

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.

题意分析

找出数组中所有个数≥3的等差数列的个数.

算法分析

一开始想着数出数组中连续的等差数列的长度len, 再将这些len对应的子数组个数(len1)(len2)/2累加起来得到结果. 但是后来遇到了很多边界问题, 处理不好. 所以后来干脆每步都累计一下.

具体实现

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

复杂度分析

时间O(N)
空间O(1)