Leetcode——413. 等差数列划分
Posted 大黄奔跑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode——413. 等差数列划分相关的知识,希望对你有一定的参考价值。
题目描绘:题目链接
题目中需要求解一个数组中等差数组的个数,这个问题可以利用动态规划的思路来分析。
三步骤:
1:问题归纳。题目需要求解等差数列的和,我们可以用一个数组保存前i个元素可以构成的等差数列的个数。dp[ i ],最后需要的时候再求和。
2:递归关系式的书写:等差数列无非要满足这个关系:a[ i ] - a[i-1] = a[i-1] - a[i-2];如果再添加一个元素a[i+1]满足:a[i+1] - a[i] = a[i] - a[i -1],则只需要在前者的基础上加1就可以。
递推关系:dp[i] = dp[i-1]+1
3:初始化:满足dp[0] = 0;dp[1] = 0.
代码如下:
class Solution { public int numberOfArithmeticSlices(int[] A) { if(A == null || A.length == 0){ return 0; } int len = A.length; int[] a = new int[len]; for(int i = 2; i < len; i++){ if(A[i] - A[i-1] == A[i-1]-A[i-2]){ a[i] = a[i-1] + 1; } }
//最后求和 int sum = 0; for(int t: a){ sum += t; } return sum; } }
以上是关于Leetcode——413. 等差数列划分的主要内容,如果未能解决你的问题,请参考以下文章
(Java) LeetCode 413. Arithmetic Slices —— 等差数列划分
leetcode 413. 等差数列划分(Arithmetic Slices)