leetcode-413 等差数列划分

本文解析了一段Java代码,该代码用于计算给定数组中的等差子数组数量。通过遍历数组并检查相邻元素之间的差值是否相等,可以找到所有连续的等差子数列。博客作者通过举例说明了代码的工作原理,并强调了在统计过程中避免漏数的重要性。
摘要由CSDN通过智能技术生成

话不多说直接上代码:

class Solution {
    public int numberOfArithmeticSlices(int[] nums) {
        if(nums.length<3){
            return 0;
        }
        int continual=0;
        int count=0;
        
        for(int i = 2; i < nums.length; i++){
            if(nums[i]-nums[i-1] == nums[i-1]-nums[i-2]){
                continual++;
            }
            else{
                continual = 0;
            }
            count+=continual;
        }
        return count;
    }
}

 以下我来解释一下我自己对这段代码的理解和感受

        等差数列顾名思义即数列中相邻数的差值相等,所以要牢牢把握nums[i]-nums[i-1] == nums[i-1]-nums[i-2]这个核心。题目的要求是找出为等差数组的 子数组 个数。这有点像小学时候看立体图数正方体的题目。例如一个简单数列{1,2,3,4,5}中,元素最少的等差子数列有三个元素,而元素最多的子数列有五个元素。一定要注意避免漏数因小数列“耦合”成的较大数列。

continual即数列中从某个元素(即“起始元素”)开始连续等差的某段子数列下,当前元素nums[i-1]距离“起始元素”的距离。


 如上述例子中{1,2,3,4,5},当循环执行到对{1,2,3}进行判断时,以{1,2,3}即唯一等差子数列,则continual和count均为1;

当循环执行到对{2,3,4}进行判断时,以{2,3,4}为基础向左边延伸的等差子数列还有{1,2,3,4},则continual为2,count = 1+2;

当循环执行到对{3,4,5}进行判断时,以{3,4,5}为基础向左边延伸的等差子数列还有{2,3,4,5}和{1,2,3,4,5},则continual为3,count = 1+2+3;

以此类推,即可不漏一项得统计出等差子数列的个数


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值