1. 程式人生 > >Leetcode——413. 等差數列劃分

Leetcode——413. 等差數列劃分

num href 關系 求和 https none [] 思路 display

題目描繪:題目鏈接

題目中需要求解一個數組中等差數組的個數,這個問題可以利用動態規劃的思路來分析。

三步驟:

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. 等差數列劃分