LC446-等差数列划分 II - 子序列

446. 等差数列划分 II - 子序列

思路:类似最长上升子序列,注意开long long 就好。

体会:dp开一维不够表示的时候多开一维

using ll = long long;
class Solution {
public:
    int numberOfArithmeticSlices(vector<int>& nums) {
        int n = nums.size(), res = 0;
        vector<unordered_map<ll, ll>>f(n + 1),g(n + 1);
        for(int i = 1; i < n; ++i)
            for(int j = 0; j < i; ++j){
                ll delta = (ll)nums[i] - nums[j];
                if(f[j].count(delta))f[i][delta] += f[j][delta];
                if(g[j].count(delta))f[i][delta] += g[j][delta];
                g[i][delta] += 1;
            }
        for(int i = 0; i < n; ++i)
            for(auto& [k,v] : f[i])
                res += v;
        return res;
    }
};
上一篇:BUCK电路电感电容计算


下一篇:数学分析(2): 有限覆盖定理和一致连续定理