446.等差数列划分II-子序列
链接:446.等差数列划分II-子序列
难度:Hard
标签:数组、动态规划
简介:给你一个整数数组 nums ,返回 nums 中所有 等差子序列 的数目。
题解 1 - typescript
- 编辑时间:2021-08-11
- 执行用时:396ms
- 内存消耗:73.1MB
- 编程语言:typescript
- 解法介绍:动态规划,dp[i]=以 nums[i]结尾的公差映射。
function numberOfArithmeticSlices(nums: number[]): number {
const map = new Map<number, Map<number, number>>(
nums.map((_, i) => [i, new Map<number, number>()])
);
const n = nums.length;
let ans = 0;
for (let i = 0; i < n; i++) {
const num = nums[i];
for (let j = 0; j < i; j++) {
const v = num - nums[j];
const c = map.get(j)!.get(v) ?? 0;
ans += c;
map.get(i)!.set(v, (map.get(i)!.get(v) ?? 0) + c + 1);
}
}
return ans;
}