一、题目描述:
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
};
四、总结:
- 还是画图画图,找前后状态关系