413. 等差数列划分

2021-08-10  本文已影响0人  漫行者_

413. 等差数列划分

做这题的适合没有注意子数组的解释,所以读题一定要仔细啊。
对于动态规划的题,先决条件一定是可以用暴力深度遍历可以做的,
然后另外一个绝大数特征就是求个数这种。

在这里的思考,设置一个dp数组,第i个数表示必须以第i个数结尾的所有子数组的个数。
那么当第i+1个数的差和之前差一样的时候。就说明dp[i+1]=dp[i]+1;

class Solution {
     public int numberOfArithmeticSlices(int[] nums) {
        if(nums.length < 3) return 0;
        int dp[] = new int[nums.length];
        int array[] = new int[nums.length];
        for (int i = 1; i < nums.length; i++) {
            array[i] = nums[i] - nums[i-1];
        }
        for(int i=2; i<array.length; i++) {
            if(array[i] == array[i-1]) {
                dp[i] = dp[i-1] + 1;
            }
        }
        int sum= 0;
        for (int i = 0; i < dp.length; i++) {
            sum+=dp[i];
        }
        return sum;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读