
算法理解
ShareBeHappy_Qin
这个作者很懒,什么都没留下…
展开
-
506. 相对名次
解析 使用希尔排序算法对运动员的成绩排序,建立出每位运动员的成绩和名次的映射关系。然后遍历整个数组,将每位运动员的成绩替换为名次即可。 class Solution { public String[] findRelativeRanks(int[] nums) { int[] arr = nums.clone(); shellSort(arr); // 建立每位运动员的成绩和名次的映射关系 HashMap<Integer, Int转载 2021-04-02 17:58:32 · 127 阅读 · 0 评论 -
leetcode 1007. 行相等的最少多米诺旋转 —— 贪心算法
1007. 行相等的最少多米诺旋转 题目来源:力扣(LeetCode) https://leetcode-cn.com/problems/minimum-domino-rotations-for-equal-row/ 解题思路: 如果能使A中或者B中所有值都相等,比如都为x,那么必然在A[0]或B[0]中至少也存在一个x。 于是对于该问题,我们只需要考虑以A[0]、B[0]这两个数为基准,查找后面每个A[i]、B[i]元素是否存在与A[0]、B[0]相等。 public int minDominoRotat原创 2020-07-16 23:04:46 · 209 阅读 · 0 评论 -
算法 —— 贪心算法
贪心算法 贪心算法(又称贪婪算法)是指,在对问题进行求解时,总是做出在当前看来是最好结果的选择。其不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。 贪心算法一般按如下步骤进行: ①建立数学模型来描述问题; ②把求解的问题分成若干个子问题; ③对每个子问题求解,得到子问题的局部最优解; ④把子问题的解局部最优解合成原来解问题的一个解。 贪原创 2020-07-14 12:02:22 · 240 阅读 · 0 评论 -
算法——状态压缩动态规划(状压dp)
状态压缩动态规划(状压dp) 动态规划实际上就是重复使用历史记录。有时候在解决一个问题的时候,通常是将问题转化为一系列的子问题,子问题再转化为一些的子问题,这样就把大问题细化成了小问题,但是在所有的子问题中可能出现相同的子问题,于是动态规划就将每种的不同的子问题存储到表中,当再次遇到相同的子问题就从表中查找已存的历史记录即可,减少计算时间。把历史记录称作为状态。 通常用一位数组dp[]或者二维数组dp[][]甚至三维数组dp[][][]来保存历史记录(状态)。 有时候对于一些问题,其状态表示很复杂,需要较多原创 2020-07-11 18:18:42 · 353 阅读 · 0 评论 -
算法 —— 动态规划
动态规划(DP)与分治算法相似,都是通过组合子问题的解来求解原问题。 分治方法将问题划分为互不相交的子问题,递归地求解子问题,再将它们的解组合起来,求出原问题的解。 实现方案: 自底向上法: 带备忘录的自顶向下法(记忆化搜索): https://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741374.html ...原创 2020-07-03 17:05:38 · 269 阅读 · 0 评论