问题描述
给定一个数组,要求找出其中等差数列的子数组(连续元素构成的子数组)的个数。题目链接:**点我**
样例输入输出
输入:[1,2,3,4]
输出:3
解释:子数组为:[1,2,3]、[2,3,4]、[1,2,3,4]
输入:[1]
输出:0
问题解法
使用二维数组 dp[i][j] 表示由 i 到 j 构成的子数组是否是等差数列,如果是设置值为 true,否则设置为 false,最后遍历数组统计 true 的数量即为答案。代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
   | class Solution {     public int numberOfArithmeticSlices(int[] nums) {         boolean[][] dp = new boolean[nums.length][nums.length];         for (int i = 2; i < nums.length; i++) {             if (nums[i - 1] - nums[i - 2] == nums[i] - nums[i - 1]) {                 dp[i - 2][i] = true;             }         }                  for (int i = 3; i < nums.length; i++) {             for (int j = 0; j < i - 2; j++) {                 if (dp[j][i - 1] && nums[i] - nums[i - 1] == nums[i - 1] - nums[i - 2]) {                     dp[j][i] = true;                 }             }         }                  int count = 0;         for (int i = 0; i < nums.length; i++) {             for (int j = i + 1; j < nums.length; j++) {                 if (dp[i][j]) {                     count++;                 }             }         }                  return count;     } }
  |