动态规划子序列问题系列一>等差序列划分II

题目:


解析:

1.状态表示:


2.状态转移方程:

这里注意有个优化


3.初始化:


4.填表顺序:


5.返回值:

返回dp表总和



代码:

java 复制代码
public int numberOfArithmeticSlices(int[] nums) {
        int n = nums.length;
        int sum = 0;
        int[][] dp = new int[n][n];

        //初始化哈希表
        Map<Long,List<Integer>> hash = new HashMap<>();
        for(int i = 0; i < n; i++){
            long tmp = (long)nums[i];
            //判断一下哈希表中是否存在tmp这个元素,不存在就new List,再存放放入List数组中
            if(!hash.containsKey(tmp))
              hash.put(tmp,new ArrayList<>()); 

            //哈希表存不存在tmp元素,都就放入List数组中
            hash.get(tmp).add(i);
        }

        for(int j = 2; j < n; j++)
            for(int i = 1; i < j; i++){
                long a = 2L * nums[i] - nums[j];//数据可能超出范围
                if(hash.containsKey(a))
                    for(int x : hash.get(a))
                        if(x < i)
                          dp[i][j] += dp[x][i] + 1;
                        else break; //小优化
                sum += dp[i][j];    
            }

        return sum;      
    }
相关推荐
爱喝矿泉水的猛男2 小时前
非定长滑动窗口(持续更新)
算法·leetcode·职场和发展
YuTaoShao2 小时前
【LeetCode 热题 100】131. 分割回文串——回溯
java·算法·leetcode·深度优先
YouQian7722 小时前
Traffic Lights set的使用
算法
go54631584654 小时前
基于深度学习的食管癌右喉返神经旁淋巴结预测系统研究
图像处理·人工智能·深度学习·神经网络·算法
aramae4 小时前
大话数据结构之<队列>
c语言·开发语言·数据结构·算法
大锦终4 小时前
【算法】前缀和经典例题
算法·leetcode
想变成树袋熊4 小时前
【自用】NLP算法面经(6)
人工智能·算法·自然语言处理
cccc来财5 小时前
Java实现大根堆与小根堆详解
数据结构·算法·leetcode
Coovally AI模型快速验证6 小时前
数据集分享 | 智慧农业实战数据集精选
人工智能·算法·目标检测·机器学习·计算机视觉·目标跟踪·无人机
墨尘游子6 小时前
目标导向的强化学习:问题定义与 HER 算法详解—强化学习(19)
人工智能·python·算法