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

十念  论坛元老 | 2024-12-28 13:59:36 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1036|帖子 1036|积分 3108

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
标题: 
  
 
  
  解析: 
  1.状态表现: 
  
 
  
  2.状态转移方程: 
  这里注意有个优化
  
 
  
  3.初始化: 
  
 
  
  4.填表顺序: 
  
 
  
  5.返回值: 
  返回dp表总和 
  
  
  代码: 
  1. public int numberOfArithmeticSlices(int[] nums) {
  2.         int n = nums.length;
  3.         int sum = 0;
  4.         int[][] dp = new int[n][n];
  5.         //初始化哈希表
  6.         Map<Long,List<Integer>> hash = new HashMap<>();
  7.         for(int i = 0; i < n; i++){
  8.             long tmp = (long)nums[i];
  9.             //判断一下哈希表中是否存在tmp这个元素,不存在就new List,再存放放入List数组中
  10.             if(!hash.containsKey(tmp))
  11.               hash.put(tmp,new ArrayList<>());
  12.             //哈希表存不存在tmp元素,都就放入List数组中
  13.             hash.get(tmp).add(i);
  14.         }
  15.         for(int j = 2; j < n; j++)
  16.             for(int i = 1; i < j; i++){
  17.                 long a = 2L * nums[i] - nums[j];//数据可能超出范围
  18.                 if(hash.containsKey(a))
  19.                     for(int x : hash.get(a))
  20.                         if(x < i)
  21.                           dp[i][j] += dp[x][i] + 1;
  22.                         else break; //小优化
  23.                 sum += dp[i][j];   
  24.             }
  25.         return sum;      
  26.     }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

十念

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表