题目:给一个数组,求可以切多少片,切的片要求至少有三个数,并且成等差数列,比如【1,2,3,4】可以切成【1,2,3】,【2,3,4】和【1,2,3,4】三种
思路:自己举几个例子找下规律,用动态规划的话,当前值依赖之前一个值和一个参数,这个参数从1开始每次增加1,比如[1,2,3,4,5] dp[0]=0;dp[1]=0;dp[2]=dp[1]+x=0+1=1; dp[3]=dp[2]+x=1+2=3(x每次会加1,至于为什么,模拟一下就出来了),但是如果中间出现断裂,比如【1,2,3,6,7,8】到了dp[3]的时候,那么x就要重新被初始化
public int numberOfArithmeticSlices(int[] A) { int n=A.length; if(n<2) return 0; if(n==2) return 0; int[] dp = new int[n]; dp[0]=0; dp[1]=0; int sum=0; for(int i=2;i<n;i++){ if(A[i]-A[i-1]==A[i-1]-A[i-2]){ sum++; }else{ sum=0; } dp[i]=sum+dp[i-1]; } return dp[n-1]; }