LeetCode 413 . 等差数列划分

本文介绍了如何使用动态规划方法解决一个关于计算从给定整数序列中找到以每个数结尾的连续等差数列数量的问题。通过状态转移方程f[i] = f[i-1] + (f[i-1] - f[i-2]) == f[i-1],作者展示了如何递推求解并优化状态计算过程。关键在于理解连续性对等差数列的影响和状态之间的依赖关系。
摘要由CSDN通过智能技术生成

在这里插入图片描述
状 态 表 示 : f [ i ] 状态表示:f[i] f[i]

属 性 : 从 前 i 个 数 中 选 , 以 第 i 个 数 结 尾 的 等 差 数 列 的 个 数 属性:从前i个数中选,以第i个数结尾的等差数列的个数 ii

状 态 计 算 : 状态计算:
因 为 题 目 要 求 是 连 续 的 , 所 以 f [ i ] 的 数 量 只 与 f [ i − 1 ] 有 关 因为题目要求是连续的,所以f[i]的数量只与f[i-1]有关 f[i]f[i1]

当 f [ i ] − f [ i − 1 ] = = f [ i − 1 ] − f [ i − 2 ] 时 当f[i] - f[i-1] == f[i-1] - f[i - 2]时 f[i]f[i1]==f[i1]f[i2]

f [ i ] = f [ i − 1 ] + 1 ; f[i] = f[i - 1] + 1; f[i]=f[i1]+1;

因 为 这 个 时 候 我 们 有 两 种 情 况 , 一 种 直 接 接 在 f [ i − 1 ] 后 , 因为这个时候我们有两种情况,一种直接接在f[i-1]后, f[i1]
一 种 把 所 有 以 n u m s [ i − 1 ] 结 尾 的 等 差 数 列 的 第 一 个 数 去 掉 , 一种把所有以nums[i-1]结尾的等差数列的第一个数去掉, nums[i1]
接 上 f [ i ] , 这 种 情 况 一 定 满 足 要 求 接上f[i],这种情况一定满足要求 f[i],

class Solution {
public:
    int numberOfArithmeticSlices(vector<int>& nums) {
        int n = nums.size();
        vector<int>f(n+1, 0);
        int res = 0;
        int f1 = 0, f2 = 0;
        for(int i = 3; i <= n; i ++){
            if(2 * nums[i-2] == nums[i-1] + nums[i-3]){
                f[i] = f[i-1] + 1;
            }
        }
        for(int i = 1; i <= n; i++) res += f[i];
        return res;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值