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;
    
    }

  • 相关阅读:
    mysql-03
    mysql-02
    mysql-01
    RESTFUL设计风格
    mysql水平拆分和垂直拆分
    redis连环夺命问
    Python 的十大重要特性
    吊打--redis
    python2和3 的区别
    tornado第一段代码
  • 原文地址:https://www.cnblogs.com/wex1022/p/14848577.html
Copyright © 2011-2022 走看看