413. 等差数列划分
2021-08-10 本文已影响0人
漫行者_
413. 等差数列划分
做这题的适合没有注意子数组的解释,所以读题一定要仔细啊。
对于动态规划的题,先决条件一定是可以用暴力深度遍历可以做的,
然后另外一个绝大数特征就是求个数这种。
在这里的思考,设置一个dp数组,第i个数表示必须以第i个数结尾的所有子数组的个数。
那么当第i+1个数的差和之前差一样的时候。就说明dp[i+1]=dp[i]+1;
class Solution {
public int numberOfArithmeticSlices(int[] nums) {
if(nums.length < 3) return 0;
int dp[] = new int[nums.length];
int array[] = new int[nums.length];
for (int i = 1; i < nums.length; i++) {
array[i] = nums[i] - nums[i-1];
}
for(int i=2; i<array.length; i++) {
if(array[i] == array[i-1]) {
dp[i] = dp[i-1] + 1;
}
}
int sum= 0;
for (int i = 0; i < dp.length; i++) {
sum+=dp[i];
}
return sum;
}
}