力扣--动态规划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;
    }
};
相关推荐
zephyr_zeng4 分钟前
VsCode + EIDE + OpenOCD + STM32(野火DAP) 开发环境配置
c语言·c++·vscode·stm32·单片机·嵌入式硬件·编辑器
帅弟15019 分钟前
Day4 C语言与画面显示练习
c语言·开发语言
Stack Overflow?Tan901 小时前
c++实现在同一台主机两个程序实现实时通信
开发语言·c++
小六子成长记1 小时前
C语言数据结构之顺序表
数据结构·链表
@@永恒2 小时前
map&set
c++
北顾南栀倾寒2 小时前
[算法笔记]cin和getline的并用、如何区分两个数据对、C++中std::tuple类
笔记·算法
小鹏编程2 小时前
【C++教程】C++中的基本数据类型
开发语言·c++·教程·少儿编程
熊峰峰2 小时前
C++第十节:map和set的介绍与使用
开发语言·c++
Antonio9152 小时前
【网络编程】事件选择模型
网络·c++
程序员Linc3 小时前
用OpenCV写个视频播放器可还行?(C++版)
c++·opencv·音视频·opencv 4.11