力扣--动态规划413.等差数列划分

思路分析 :

  1. 开始时判断输入向量的大小是否小于等于2,若是,则返回0,因为少于3个元素不可能形成等差数列。
  2. 初始化一个大小为n的动态规划数组dp,用于存储以每个位置为结尾的等差数列的数量。
  3. 初始化一个变量result用于存储最终的结果,表示整个向量中的等差数列总数。
  4. 从第三个元素(索引2)开始遍历输入向量。
  5. 对于每个元素,检查它与前两个元素是否构成等差数列。
  6. 如果是等差数列,更新动态规划数组dp,并将当前位置的数量添加到result中。
  7. 最终返回result,即等差数列的总数量。
cpp 复制代码
#include <vector>

class Solution {
public:
    int numberOfArithmeticSlices(std::vector<int>& nums) {
        // 获取输入向量的大小
        int n = nums.size();
        
        // 如果大小小于等于2,则没有等差数列
        if (n <= 2)
            return 0;
        
        // 初始化一个动态规划(DP)数组,用于存储以每个位置为结尾的等差数列的数量
        std::vector<int> dp(n, 0);
        
        // 初始化一个变量,用于存储最终的结果
        int result = 0;
        
        // 从第三个元素(索引2)开始遍历输入向量
        for (int i = 2; i < n; i++) {
            // 检查当前三个连续的元素是否构成等差数列
            if (nums[i] - nums[i - 1] == nums[i - 1] - nums[i - 2]) {
                // 如果是,更新DP数组,并将数量添加到结果中
                dp[i] = dp[i - 1] + 1;
                result += dp[i];
            }
        }
        
        // 返回最终结果,表示整个向量中的等差数列总数
        return result;
    }
};
相关推荐
羑悻的小杀马特5 分钟前
【狂热算法篇】解锁数据潜能:探秘前沿 LIS 算法
c++·算法·动态规划·lis算法
egoist202315 分钟前
数据结构之单链表(超详解)
c语言·开发语言·数据结构·笔记·学习·链表·gitee
xinghuitunan20 分钟前
考试座位号(PTA)C语言
c语言·开发语言
R_.L1 小时前
七大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序
数据结构·算法·排序算法
jk_1011 小时前
MATLAB中binopdf函数用法
开发语言·算法·matlab
HEU_firejef1 小时前
面试经典150题——区间
算法·面试·职场和发展
ゞ 正在缓冲99%…1 小时前
leecode300.最长递增子序列
算法·动态规划
浮生如梦_2 小时前
C#Halcon深度学习预热与否的运行时间测试
图像处理·人工智能·深度学习·算法·计算机视觉·c#·视觉检测
极客代码2 小时前
深入理解C语言:编译原理
c语言·开发语言·性能优化·编译原理·代码优化
TANGLONG2222 小时前
【C++】穿越时光隧道,拾贝史海遗珍,轻启C++入门之钥,解锁程序之奥秘(首卷)
java·c语言·数据结构·c++·redis·python·算法