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 }