[LeetCode413. 等差数列划分] | 刷题打卡

95 阅读1分钟

一、题目描述:

leetcode-cn.com/problems/ar… 如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。 ****示例 1:

A = [1, 2, 3, 4]
返回: 3, A 中有三个子等差数组: [1, 2, 3], [2, 3, 4] 以及自身 [1, 2, 3, 4]

二、思路分析:

  • 设f(i,j)为以j结尾的区间包含的等差数列数量
  • 若是A[j+1]能与f(i,j)继续延长等差数列,则f(i,j) = f(i,j-1) + (j-i-1)
  • 若是不能则可以将当前的f(i,j)累加到总的数量中,同时更新i

三、AC 代码:

/**
 * @param {number[]} nums
 * @return {number}
 */
var numberOfArithmeticSlices = function (nums) {
    let i = 0
    let count = 0
    let tempCount = 0
    for (let j = 2; j < nums.length; j++) {
        if (nums[j] - nums[j - 1] === nums[j - 1] - nums[j - 2]) {
            tempCount += (j - i - 1)
        } else {
            count += tempCount
            i = j - 1
            tempCount = 0
        }
    }

    return count + tempCount

};

四、总结:

  • 还是画图画图,找前后状态关系