
算法
算法与leetcode
white煞
这个作者很懒,什么都没留下…
展开
-
如何理解摩尔投票法(力扣的求众数),看了还不会的来砍我
力扣的求众数 可以先看看解题榜第一名做出的摩尔投票法的动图,先存在脑海里 2.看下这里理解: 3.还看不懂?没关系,我来结合这两者进行补充: 比如这个测试用例: 将1,2,3,5,4想象成5个国家的士兵 约定: 1.每个国家的士兵不能内战 2.每个国家的士兵都可以攻击不同国家的士兵 3.每次攻击都是双方同归于尽的 4.最终在战场上活下来的士兵归属的国家算胜利 ** 那么假如有一个国家的士兵超过了参战人数的一半,请问哪个国家胜利? ** 那么显而易见,假如所有不同国家的士兵都去攻击这个大国的士兵(测试用例原创 2020-09-25 11:14:39 · 256 阅读 · 1 评论 -
【类】二维dp:动态规划背包问题
** dp[n][m]含义就是:当有n种物品时且背包有m容量时,这个背包能产生的最大价值 ** 状态转换关系是:dp[n][m]=dp[n-1][m],dp[n-1][m-新物品重量] 意思就是,当面对新来的一个物品时,求这个情况下,背包能产生的最大价值 相当于求下面两个情况背包能产生的最大价值: 1.无视这个新物品,不放入背包 2.一定要把这个新物品放入背包 思路: 1.首先填满最上面一排和最左边一列 接着搞个双重循环填满dp 最后返回的是这个值: public static int knap..原创 2020-05-25 16:27:17 · 311 阅读 · 0 评论 -
回溯的通用解法
首先看看通用模板: 这篇博客很棒一定要去看看 for 选择 in 选择列表: # 做选择 将该选择从选择列表移除 路径.add(选择) backtrack(路径, 选择列表) # 撤销选择 路径.remove(选择) 接下来入手两道题目就可以掌握其规律了: 1.subset 决策树: public List<List<Integer>> subsets(int[] nums) { List<List<Integ原创 2020-05-24 15:51:49 · 406 阅读 · 0 评论 -
用递归解决----组合问题(顺序无关)
直接用主逻辑 可能分解的时候不好理解:但是看图应该问题不大,就是按这个例子,不断分解,每个分解出来的结果相加就是主函数。 主逻辑的意义:curse,这个递归函数的意思就是:给定一个区间,[start,n],选取k个元素,有几种可能。 public static List<List<Integer>> combine(int n, int k) { if (n < k) return null; return curse(原创 2020-05-20 11:54:07 · 422 阅读 · 0 评论 -
【类】用递归计算-----所有的排列顺序
这里可直接用主逻辑,求解这个数组的所有排列可能,等价于:排列好去除一个元素的这个数组,再与被去除的这个元素整合。把所有可能加起来就是结果 public static List<List<Integer>> permute(int[] nums) { List<List<Integer>>result=new ArrayList<>(); if (nums.length==0) return .原创 2020-05-19 14:52:22 · 187 阅读 · 0 评论 -
【类】:使用递归解决-----排列出n×m×p×...×u种可能的情况
例: 就如图所示,abc和def,一共有如上种可能。 那么现在开始coding核心代码 先放代码 public static List<String>curse(List<String>input){ List<String>result=new ArrayList<>(); if (input.size()==0){ return result; } if (inpu原创 2020-05-19 09:04:11 · 132 阅读 · 0 评论