Leetcode Arithmetic Slices

題目:
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]=nums[i1]+consecutiveLen

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];
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章