413. Arithmetic Slices(等差级数)

本文介绍了LeetCode上第413题“等差序列切片”的解决方法,该题旨在找出给定数组中所有的等差序列切片,并统计其数量。文章详细解释了等差序列的概念,提供了完整的代码实现及解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标签(空格分隔): leetcode dp


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.

题意:
1. 数字序列如果由至少三个元素组成,并且任何两个连续元素之间的差异是相同的,则称为等差。
2. 等差数列如上面的例子;
3. 给出了由N个数字组成的零开始的索引数组A.,如果序列:A [P],A [p + 1],…,A [Q-1],A[Q]是等差运算;
4. 特别地,这意味着P+1<Q。该阵列的切片是任何一对整数(P,Q),使得0<=P<Q<N.数组A的切片(P,Q)称为等差数列;
5. 该函数应该返回数组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.

说明:
1. 数列至少有3个数: p+1<q
2. [p+1] - [p] = [p+2]- [p+1]
3. 返回所有子序列为等差序列的数目

代码:

int numberOfArithmeticSlices(vector<int>& A) {
    int len = A.size();
    if (len < 3)  //小于三的长度,直接返回
        return 0;
    int totalsum = 0;
    int sum = 2;//设在2的长度,只要下面比较相等,说明长度为三
    for (int i = 2; i < len; ++i)
    {
        if ((A[i-1]-A[i-2])==(A[i]-A[i-1]))//至少三个相等,sum+1
        {
            sum++;
        }
        else if (!(sum<2))//遇到不是等差的数,并且长度大于等于3,先统计
        {
            for (int j = 1; j <sum - 1; ++j)
                totalsum += j;
            sum = 2; //非常重要,必须重新初始化
        }
    }
    if (!(sum < 2)) //遇到等差数列结尾的情况,需要统计
    {
        for (int j = 1; j <sum - 1; ++j)
            totalsum += j;
    }
    return totalsum;

}

非常感谢下面文档的灵感!
【相关文档】
1.LeetCode 413.Arithmetic Slices 解题报告

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值