題目:
A sequence of number is called arithmetic if it consists of at least three elements and if the difference between any two consecutive elements is the same.
A zero-indexed array A consisting of N numbers is given. A slice of that array is any pair of integers (P, Q) such that 0 <= P < Q < N.
A slice (P, Q) of array A is called arithmetic if the sequence:
A[P], A[p + 1], …, A[Q - 1], A[Q] is arithmetic. In particular, this means that P + 1 < Q.
The function should return the number of arithmetic slices in the array A.
題目解析:
題目要求找到所有arithmetic slices的個數。根據example可以看出後一個數組和前一個數組的arithmetic slices個數有關。因此運用動態規劃的思想,寫出狀態轉移方程:
nums[i]表示的是在前i個數的arithmetic slices的個數。此外,再用一個consecutiveLen來記錄與第i個數相鄰中等差數列的長度。
源代碼:
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& A) {
if (A.size() < 3) return 0;
int nums[A.size()];
memset(nums, 0, sizeof(nums));
int conLen = 0, d = 0;
if (A[2] - A[1] == A[1] - A[0]) {
conLen = 1;
nums[2] = 1;
}
d = A[2] - A[1];
for (int i = 3; i < A.size(); i++) {
A[i] - A[i - 1] != d? conLen = 0: conLen++;
d = A[i] - A[i - 1];
nums[i] = nums[i - 1] + conLen;
}
return nums[A.size() - 1];
}
};