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

  • 相关阅读:
    474 Ones and Zeroes 一和零
    473 Matchsticks to Square 火柴拼正方形
    472 Concatenated Words 连接的单词
    Django 视图系统
    Django 路由系统
    Django 框架基础
    jQuery
    JavaScript- BOM, DOM
    CSS概念,引入,选择器
    HTML
  • 原文地址:https://www.cnblogs.com/wex1022/p/14848577.html
Copyright © 2020-2023  润新知