
算法
文章平均质量分 69
爱敲代码的学长
这个作者很懒,什么都没留下…
展开
-
经典的6中算法思想之递归算法
实际上 getElementById 浏览器是用的一个哈希 map 存储的,根据 id 直接映射到 DOM 结点,而 getElementsByClassName 就是用的这样的非递归查找。递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。使用递归的优点是代码简单易懂,缺点是效率比不上非递归的实现。由于DOM是一棵树,而树的定义本身就是用的递归定义,所以用递归的方法处理树,会非常地简单自然。当前结点的 id 不符合查找条件,递归查找它的每一个子结点。原创 2023-07-19 10:36:12 · 48 阅读 · 0 评论 -
经典的6中算法思想之回溯算法
回溯实际上是一种试探算法,这种算法跟暴力搜索最大的不同在于,在回溯算法里,是一步一步地小心翼翼地进行向前试探,会对每一步探测到的情况进行评估,如果当前的情况已经无法满足要求,那么就没有必要继续进行下去,也就是说,它可以帮助我们避免走很多的弯路。回溯算法的特点在于,当出现非法的情况时,算法可以回退到之前的情景,可以是返回一步,有时候甚至可以返回多步,然后再去尝试别的路径和办法。回溯算法是一种搜索法,试探法,它会在每一步做出选择,一旦发现这个选择无法得到期望结果,就回溯回去,重新做出选择。原创 2023-07-18 15:01:59 · 54 阅读 · 0 评论 -
经典算法思想题目-全排列问题
给定一个数字的序列,返回其所有可能的全排列。原创 2023-07-18 15:01:42 · 344 阅读 · 0 评论 -
经典算法思想题目-买卖股票的最佳时机 II
某种意义上说,贪心算法是很贪婪、很目光短浅的,它不从整体考虑,仅仅只关注当前的最大利益,所以说它做出的选择仅仅是某种意义上的局部最优,但是贪心算法在很多问题上还是能够拿到最优解或较优解,所以它的存在还是有意义的。第 i-1 天买入第 i 天卖出获利 prices[i+1]-prices[i] ,我们仅仅需要将 prices[i+1]-prices[i] 的所有正值加起来就是可获取的最大利益。,第 i 天买入,第 i+1 天卖出,如果 i 天买入第 i+1 天卖出有利润则买入,否则不买。原创 2023-07-17 15:45:55 · 214 阅读 · 0 评论 -
经典算法思想题目-分割数组为连续子序列
给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3。如果可以完成上述分割,则返回 true;否则,返回 false。先统计每个数出现次数,然后从小到大开始组合:总是贪心地和比自己小1的数结尾的长度为1的子集组合,成为以当前数结尾的长度为2的子集剩下的数和比自己小1的数结尾的长度为2的子集组合,成为以当前数结尾的长度为3的子集。原创 2023-07-17 15:45:43 · 171 阅读 · 0 评论 -
经典算法思想题目-最长回文子串
dp[i][j] 表示子串 s[i..j] 是否为回文子串,这里子串 s[i..j] 定义为左闭右闭区间,可以取到 s[i] 和 s[j]。原创 2023-07-16 09:49:37 · 50 阅读 · 0 评论 -
经典算法思想题目-最大子序和
动态规划是将整个数组归纳考虑,假设我们已经知道了以第 i-1 个数结尾的连续子数组的最大和 dp[i-1],显然以第i个数结尾的连续子数组的最大和的可能取值要么为 dp[i-1]+nums[i],要么就是 nums[i] 单独成一组,也就是 nums[i] ,在这两个数中我们取最大值。原创 2023-07-16 09:48:55 · 79 阅读 · 0 评论 -
经典算法思想题目-回文子串
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。原创 2023-07-15 22:52:58 · 76 阅读 · 0 评论 -
经典算法思想题目-买卖股票的最佳时机
动态规划是将整个数组归纳考虑,假设我们已经知道了 i-1 个股票的最大利润为 dp[i-1],显然 i 个连续股票的最大利润为 dp[i-1] ,要么就是就是 prices[i] - minprice ( minprice 为前 i-1 支股票的最小值 ),在这两个数中我们取最大值。原创 2023-07-15 22:52:39 · 169 阅读 · 0 评论 -
经典算法思想题目-最小花费爬楼梯
数组的每个索引作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i] (索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例 1:示例 2:注意:本题注意理解题意:第一步:定义子问题踏上第 i 级台阶的体力消耗为到达前两个阶梯的最小体力消耗加上本层体力消耗:第二步:实现需要反复执行解决的子子问题部分所以踏上第 i 级台阶的最小原创 2023-07-14 09:22:56 · 178 阅读 · 0 评论 -
经典的6中算法思想之枚举算法
然而,枚举算法的缺点是在解空间较大时,会遍历大量的情况,导致算法的时间复杂度较高,执行效率低下。需要注意的是,枚举算法不适用于求解某些特定类型的问题,如最短路径、最优解等,这些问题通常需要使用其他更复杂的算法来解决。4. 有时候,我们枚举的故率达不到题目所需,我们就可以将枚举出来的所有结果事先保存下来,然后在第二份程序里直接调用,这就是打表的思想。枚举算法的优点是简单直观,能够找出问题的所有解。枚举算法的思想是:将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,保留合适的,丢弃不合适的。原创 2023-07-14 09:22:45 · 223 阅读 · 0 评论 -
经典的6中算法思想之动态规划
如果用 dp[n] 表示第 n 级台阶的方案数,并且由题目知:最后一步可能迈 2 个台阶,也可迈 1 个台阶,即第 n 级台阶的方案数等于第 n-1 级台阶的方案数加上第 n-2 级台阶的方案数。原创 2023-07-13 14:57:43 · 57 阅读 · 0 评论 -
经典的6中算法思想之分治算法
也称折半查找算法,它是一种简单易懂的快速查找算法。你每猜一次,我就会告诉你猜的大了还是小了,直到猜中为止。,将一个复杂的问题,分成两个或多个相似的子问题,在把子问题分成更小的子问题,直到更小的子问题可以简单求解,求解子问题,则原问题的解则为阿子问题解的合并。在计算机科学中,分治算法是一个很重要的算法,快速排序、归并排序等都是基于分治策略进行实现的,所以,建议理解掌握它。最后,二分法只能应用于数组有序的情况,如果数组无序,二分查找就不能起作用了。每次猜拳都把上一次的结果分出大的一组和小的一组,两组相互独立。原创 2023-07-12 15:04:19 · 55 阅读 · 0 评论