第一种思路可以采用backtracking。把一个list传递下去,每一步可以选择任意一个删除,然后再递归处理下一个,比较简单。

 public int maxCoins1(int[] nums) {if(nums == null || nums.length == 0) return 0;List<Integer> list = new ArrayList<>();for(int i : nums){list.add(i);}return findMaxCoin1(list);}public int findMaxCoin1(List<Integer> list){if(list.size() == 1) return list.get(0);if(list.size() == 0) return 0;int max = 0;for(int i = 0; i < list.size(); i++){int c = list.get(i);int l = i - 1 < 0?1:list.get(i - 1);int r = i + 1 > list.size() - 1?1:list.get(i + 1);int cur = list.get(i) * l * r;list.remove(i);max = Math.max(max, cur + findMaxCoin1(list));list.add(i, c);}return max;}

缺点就是时间复杂度太高,N!。其实bt思路或者直接子问题解决通常复杂度都是指数或者阶乘级别。因为其实就是一种暴力搜索,是一个full的tree。要想改进,就是用memo。不过这里无法加入memo,因为memo需要一个key和一个value,而这里每一种情况都是一个list,无法做key。。。如果说只包含digits的话,可以考虑转成string来处理,建立一个memo。

答案里面的一个思路很吊。首先引入了分治,但是分治无法直接使用,因为删除一个数字以后,原本不相邻的现在相邻了,就会影响到下一次的计算。也就是说如果以第一个删除的作为子问题的分类依据是不行的。有一个办法是通过最后一个删除的作为分类依据,因为最后一个删除的数组在计算和时是固定的。举例来说,比如左界是left,右界是right,现在假设最后一次删除的是第i个元素。(这里的输入做了一下改变,把原数组的左右加上了1,这样做使得处理更加简单)。那么该元素最终的贡献肯定是num[i] * num[left]*[right]。然后继续考虑该元素之前删除的,可能在其左边,也可能在右边,可以分别计算,最后相加。那么计算左边就递归(left,i),右边(i,right)。这里i必须加入,因为上一次删除的元素计算贡献时肯定会用到i元素。所以整个程序是倒着建立原本的数组的,比较抽象。

 public int maxCoins(int[] nums) {int[] nnums = new int[nums.length + 2];for(int i = 0; i < nums.length; i++){nnums[i + 1] = nums[i];}nnums[0] = 1;nnums[nnums.length - 1] = 1;int[][] memo = new int[nnums.length][nnums.length];return findMaxCoin(memo, nnums, 0, nnums.length - 1);}public int findMaxCoin(int[][] memo, int[] nnums, int left, int right){if(left + 1 == right) return 0;if(memo[left][right] > 0) return memo[left][right];int max = 0;for(int i = left + 1; i < right; i++){int l = findMaxCoin(memo, nnums, left, i);int r = findMaxCoin(memo, nnums, i, right);max = Math.max(max, l + r + nnums[i] * nnums[left] * nnums[right]);}memo[left][right] = max;return max;}

【Leetcode】312. Burst Balloons相关推荐

  1. 【LeetCode】312. 戳气球

    312. 戳气球(困难) 解法一:动态规划 首先看一个区间: 区间(i,j) 是一个开区间,因为我们只能戳爆 i 和 j 之间的气球,不能戳爆索引为 i 和 j 的气球. 我们不妨考虑该区间内被戳爆的 ...

  2. 【leetcode】解题日记(未完待续)

    开坑,有生之年系列,希望有一天能解出 leetcodeleetcodeleetcode 上的所有题目. 写题解好麻烦,懒得写(手动狗头),进度如下,不定期更新. 总题数 已解答 题解数 2058 23 ...

  3. HOT 100(61~80)【LeetCode】

    HOT 100(61~80)[LeetCode] HHOT 100(61~80) 前言 推荐 207. 课程表[中等] 208. 实现 Trie (前缀树)[中等] 215. 数组中的第K个最大元素[ ...

  4. 【Leetcode】100. 相同的树

    题目 给定两个二叉树,编写一个函数来检验它们是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 示例 1: 输入: 1 1/ \ / \2 3 2 3[1,2,3], [1 ...

  5. 【leetcode】85. Maximal Rectangle 0/1矩阵的最大全1子矩阵

    1. 题目 Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1 ...

  6. 【leetcode】486. Predict the Winner

    题目如下: Given an array of scores that are non-negative integers. Player 1 picks one of the numbers fro ...

  7. 【leetcode】132. Palindrome Partitioning II

    题目如下: 解题思路:本题是[leetcode]131. Palindrome Partitioning的升级版,要求的是求出最小cuts,如果用[leetcode]131. Palindrome P ...

  8. 【leetcode】86. Partition List

    题目如下: Given a linked list and a value x, partition it such that all nodes less than x come before no ...

  9. 【Leetcode】103. 二叉树的锯齿形层次遍历

    题目 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 ...

最新文章

  1. 用 Label 控制 Service 的位置 - 每天5分钟玩转 Docker 容器技术(106)
  2. N - New Game(DFS+剪枝)
  3. java 主题爬虫_主题爬虫 - 长颈鹿Giraffe - 博客园
  4. HYSBZ 1010 玩具装箱toy (决策单调DP)
  5. Centos安装JDK(java环境)
  6. navigator.geolocation的应用 - 将定位信息显示在百度地图上
  7. php 第一次创建文件时延迟4秒 sleep用法
  8. mysql的socket文件_修改socket文件, MySQL启动报错
  9. Nodejs内存控制详解(上篇)
  10. 用代码复杂度分析风险
  11. 论开学第一个月干了点啥
  12. 向数据库插入数据时出现乱码 --设置连接数据库的编码
  13. Leetcode: One Edit Distance
  14. 13.图像识别与文字处理
  15. Apache详解(五)WEB相关工具
  16. 领峰:个人如何投资白银炒白银有哪些方法
  17. html制作钟表盘,jquery+html5制作超酷的圆盘时钟表
  18. 【2021】01 最大流
  19. 双开助手多开分身版 v5.1.8
  20. 全方位揭秘!大数据从0到1的完美落地之大数据简介

热门文章

  1. linux服务器查看节点,集群内核节点查看命令linux
  2. Ubuntu下teamviewer的安装及使用
  3. Feng终于编译通过!效果挺不错的!
  4. 2017中国之旅系列之五:广东深圳较场尾之旅
  5. wow芒果从spell.dbc中提取技能名称
  6. 前沿科技探究DeepSQL:库内AI算法
  7. 2021 RoboCom 世界机器人开发者大赛-本科组(决赛)7-4猛犸不上 Ban(最短路)
  8. qq空间音乐查询API|经纬度查询API|手机归属地API|Taobao API接口调用实例
  9. PHP项目开发全程实录 第3版pdf
  10. python第25天_python 第25天