zoukankan      html  css  js  c++  java
  • (LC101)413-Arithmetic Slices (Medium)

    题目描述
    给定一个数组,求这个数组中连续且等差的子数组一共有多少个。
    输入输出样例
    输入是一个一维数组,输出是满足等差条件的连续字数组个数。

    Input: nums = [1,2,3,4]
    Output: 3

    在这个样例中,等差数列有 [1,2,3][2,3,4] [1,2,3,4]
    题解
    这道题略微特殊,因为要求是等差数列,可以很自然的想到子数组必定满足 num[i] - num[i-1]
    = num[i-1] - num[i-2]。然而由于我们对于 dp 数组的定义通常为以 i 结尾的,满足某些条件的子数
    组数量,而等差子数组可以在任意一个位置终结,因此此题在最后需要对 dp 数组求和。

    #include<iostream>
    #include<vector>
    #include<numeric>
    using namespace std;
    
    int numberOfArithmeticSlices(vector<int>& nums){
        int n = nums.size();
        if(n < 3){
            return 0;
        }
        vector<int>dp(n,0);
        for(int i=2;i<n;++i){
            if(nums[i] - nums[i-1] == nums[i-1] - nums[i-2]){
                dp[i] = dp[i-1] + 1;
            }
        }
        return accumulate(dp.begin(),dp.end(),0);//计算dp数组的所有元素之和
    }
    
    int main(){
        int nums[5] = {1,2,3,4};
        vector<int>nums0(nums,nums+4);
        cout<< numberOfArithmeticSlices(nums0);
        return 0;
    
    }

  • 相关阅读:
    js中不同的height, top的对比
    正则表达式入门以及记录
    CSS小记(持续更新......)
    Git远程操作
    Git Push 避免用户名和密码方法
    Git本地操作
    CSS3动画属性
    c语言文法
    实验一、词法分析器实验
    词法分析器
  • 原文地址:https://www.cnblogs.com/wex1022/p/14848577.html
Copyright © 2011-2022 走看看