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