难度:困难。
标签:数组,动态规划。
看题解。
哈希表数组,我也是傻了。。。
有两个元素的序列成为弱等差序列。定义dp[i][d]表示最后一项为nums[i],公差为d的弱等差序列的个数。
由于数据范围比较大,将第二维d用哈希表表示。
正确解法:
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& nums) {
int n = nums.size();
vector<unordered_map<long long, int>> dp(n);
int ans = 0;
for(int i = 0; i < n; ++i){
for(int j = 0; j < i; ++j){
long long d = 1LL * nums[i] - nums[j];
auto it = dp[j].find(d);
int cnt = it == dp[j].end() ? 0 : it->second;
ans += cnt;
dp[i][d] += cnt + 1;
}
}
return ans;
}
};
遇到这个题,我就凉。
(“短短几行代码,需要一生时间来治愈。”)
结果: