动态规划子序列问题系列一>等差序列划分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;      
    }
相关推荐
zxctsclrjjjcph7 分钟前
【递归、搜索和回溯】递归、搜索和回溯介绍及递归类算法例题
开发语言·c++·算法·力扣
朱剑君11 分钟前
排序算法——堆排序
算法·排序算法
某不知名網友36 分钟前
linux_进程地址空间(虚拟地址空间)
java·linux·算法
bryant_meng1 小时前
【python】Calculate the Angle of a Triangle
开发语言·python·算法
纪元A梦1 小时前
贪心算法应用:最小反馈顶点集问题详解
java·算法·贪心算法
1白天的黑夜11 小时前
动态规划-62.不同路径-力扣(LeetCode)
c++·算法·leetcode·动态规划
少了一只鹅2 小时前
深入理解指针(3)
c语言·数据结构·算法
仙人掌_lz2 小时前
从零开始理解FlashAttention:算法细节图解
人工智能·python·深度学习·算法·ai·flashattention
有一个好名字2 小时前
力扣:轮转数组
数据结构·算法·leetcode
北海有初拥2 小时前
【day04】Fibonacci数列 | 单词搜索 | 杨辉三角
算法