zoukankan      html  css  js  c++  java
  • 算术切片

    题目:给一个数组,求可以切多少片,切的片要求至少有三个数,并且成等差数列,比如【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];
        }
  • 相关阅读:
    Html代码查看器
    Http请求
    HTTP协议
    AsyncTask2
    AsyncTask
    幽灵线程解决方案
    handler消息机制入门
    多叉树的树形背包常见建模方法
    Codeforces Round #263
    怎样在win7下装ubuntu(硬盘版安装)
  • 原文地址:https://www.cnblogs.com/team42/p/6750536.html
Copyright © 2011-2022 走看看