leetcode 413 Arithmetic Slices
给定一列整数,求含有的算数片个数。
算数片定义:至少包含3个整数,每个相邻整数的差值相等。eg: 1,2,3
算法
同样的,使用动态规划求解。找到状态n和状态n-1的关系。在这里就是找到n个整数包含的算数片的个数和前n-1个整数包含的算术片的关系。
很明显,dp(n) = dp(n-1) +1
dp代表前n个整数包含的算数片的个数。
Code
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& A) {
//保存以每个点结束的算数片的个数
vector<int> las(A.size(), 0);
int totals = 0;
for (int i = 2; i < A.size(); i++){
if(A[i]-A[i-1]==A[i-1]-A[i-2]){
//以该点结束的算数片的个数等于以前一个点结束的算数片的个数加一
las[i] = las[i - 1] + 1;
totals += las[i];
}
}
return totals;
}
};
- 可以不使用数组来保存每一个状态的算数片的个数,可以使用一个变量来保存上一状态的算数片的个数,从而节省空间,具体代码略。
- 算法时间复杂度:O(n)