Arithmetic Slices

算术片的个数

思路(最优解):序列型dp。每次记录一下以当前数为末尾的算术片的最大长度以及数的等差值。下一次就能求出算术片增加的个数。使用滚动指针来优化。时间复杂度O(n),空间复杂度O(1)。

 1 public class Solution {
 2     public int numberOfArithmeticSlices(int[] A) {
 3         if (A.length < 3) {
 4             return 0;
 5         }
 6         
 7        int prev_res = 0;
 8        int prev_length = 2;
 9        int prev_diff = A[1] - A[0];
10        
11        for (int i = 2; i < A.length; i++) {
12            if (prev_diff == A[i] - A[i - 1]) {
13                prev_res += prev_length - 1;
14                prev_length++;
15            } else {
16                prev_length = 2;
17                prev_diff = A[i] - A[i - 1];
18            }
19        }
20        return prev_res;
21     }
22 }
View Code

相关文章: