![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
文章平均质量分 67
记录算法的学习
不吃鱼的猫
这个作者很懒,什么都没留下…
展开
-
匈牙利算法中st数组的作用
匈牙利算法中st数组起到避免重复搜索的目的。原创 2022-10-17 16:12:21 · 251 阅读 · 0 评论 -
不同的二叉搜索树——动态规划
文章目录题目:不同的二叉搜索树解法:动态规划题目:不同的二叉搜索树给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。解法:动态规划定义dp数组为长度为n的数组可以组合成的不同二叉搜索树的数量。f(i,n)为长度为n的数组选取i为根节点可以组合成的不同二叉搜索树的数量。则f(i,n)=dp[i−1]∗dp[n−i]f(i,n)=dp[i-1]*dp[n-i] f(i,n)=dp[i−1]∗dp[n−i]而dp[原创 2022-02-15 09:20:05 · 487 阅读 · 0 评论 -
有序数组中的单一元素——二分查找、异或位运算
文章目录题目解法一:二分查找解法二:位运算的二分查找解法三:偶数下标的二分查找题目给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。请你找出并返回只出现一次的那个数。你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。解法一:二分查找因为本题目有时间复杂度的要求,因此使用二分查找的方法解决。当取得mid索引后有三种情况:nums[mid-1]!=nums[mid]且nums[mid+1]!=nums[mid],mid即为单一元原创 2022-02-14 10:36:32 · 352 阅读 · 0 评论 -
不同路径——动态规划
文章目录题目一:不同路径解法一:动态规划优化一优化二解法二:数学题目二:不同路径II题目一:不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?解法一:动态规划本题目使用动态规划来解决比较简单,定义dp[i][j]数组为到达(i,j)点的路径数。由题中所述机器人只能向下向右走,可得递推公式为dp[i][j]=dp[i−1原创 2022-02-13 16:40:27 · 565 阅读 · 0 评论 -
爬楼梯——动态规划
文章目录题目解法一:动态规划题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?解法一:动态规划将dp[i]数组定义为到达第i阶楼梯有多少种方法,由每次可以爬1或2阶可以得到递推公式:dp[i]=dp[i-1]+dp[i-2] 其中,dp[i-1]、dp[i-2]分别为到达第i-1、i-2阶楼梯有多少种方法。然后再确定边界条件,dp[1]=1,dp[2]=2。这样得出来的实现过程时间复杂度和空间复杂度都是o(n),可以利用原创 2022-02-13 10:05:22 · 3325 阅读 · 0 评论 -
分发糖果、根据身高重建队列——贪心算法
文章目录一、分发糖果二、使用步骤1.引入库2.读入数据总结刚放假回家,做了两道贪心题,记录一下。一、分发糖果原题目:n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。解答过程:本题可以使用贪心算法求解,题目中两个要求:每个孩子的评分若大于其左边孩子,则比左孩子分到更多的糖果,若大于其右原创 2022-01-27 09:34:05 · 314 阅读 · 0 评论 -
回溯中的组合问题(电话号码的字母组合)
文章目录回溯算法一、组合二、电话号码的字母组合三、组合总和四、组合总和II五、组合总和III回溯算法经过对回溯算法的简单学习并做了几道相关的题之后,做一下这一部分的总结。回溯算法与DFS比较像,思路都是顺着一条路往下走,在走的过程中记录我们需要的相关信息,当此条路走到头时,回退一步,尝试别的路。每一层都是一次递归,每次递归都要遍历当前层的所有节点。两个重要点:递归的返回条件(当记录的信息满足题目条件时);回退前恢复原状态(在递归前将结点加入到已遍历的结点当中,当递归函数返回后,要将结点从已遍历的结原创 2022-01-15 11:25:32 · 526 阅读 · 0 评论 -
LC42——接雨水(单调栈、动态规划)
接雨水问题原题目:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。1、 简单解法首先,直观上来看能接雨水的柱子的两边肯定有比它更高的柱子。那么如何确定一根柱子可以接多少雨水呢?如前一句分析,与它左边最高的柱子和右边最高的柱子有关,两边最高的柱子中的最低的柱子减去该柱子就是这根柱子可以接到的雨水量了。因此我们可以循环遍历每一根柱子,找到其左边最高的柱子和右边最高的柱子,然后就可以计算接到的雨水量了。时间复杂度为o(n2)o(n^2)o(n2)。cl原创 2021-11-14 19:25:38 · 522 阅读 · 0 评论 -
最小栈——不借助辅助空间的实现
最小栈——不借助辅助空间的实现最小栈与普通栈的区别就是可以以o(1)o(1)o(1)的时间复杂度返回栈中的最小值。1.解决方法一般的解决方法是建立一个辅助栈,随着元素的入栈,将当前栈中所有元素的最小值存入到辅助栈中,取出元素时,同时将辅助栈中的元素弹出即为当前栈中元素的最小值。经过查阅不借助辅助栈的方法并成功实现,因此记录下来。该方法在元素存入栈时存放的不是元素的原始值,而是该值与当前栈中所有元素最小值的差值。当返回栈顶元素时,根据栈顶元素的正负(元素实际值与最小值之间的差值)计算得到元素的实际值原创 2021-11-07 17:37:31 · 1036 阅读 · 0 评论