您的位置:首页 > 产品设计 > UI/UE

Arithmetic Slices II - Subsequence

2017-01-07 10:20 405 查看
越往后做题越难了啊,像这种题不看答案根本没头绪

嘛,其实看个几天逐步推导应该也能有个大概思路,可惜最近真的没时间

记个discuss统一认同的答案吧

class Solution {
public:
int numberOfArithmeticSlices(vector<int>& A) {
if (A.empty()) return 0;
vector<unordered_map<int, int>> dp(A.size());//[index, [difference, count]]这里存储的是dif出现的次数

int res = 0;
for (int i = 0; i < A.size(); ++i) {
for (int j = 0; j < i; ++j) {
if ((long)A[i] - (long)A[j] > INT_MAX || (long)A[i] - (long)A[j] < INT_MIN) continue;// do not ignore this step, it will help you save time & space to pass OJ.

int dif = A[i] - A[j];
dp[i][dif] += 1;
if (dp[j].find(dif) != dp[j].end()) {
dp[i][dif] += dp[j][dif];
res += dp[j][dif];//res更新的时机简直精准,这一部分还没看太懂
}
}
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: