
算法
文章平均质量分 92
卜及中
一天真的很短,拿点时间看看周围
展开
-
【编程基础C++】素数判定、最小公倍数与最大公因数的实现方法
是指两个或多个整数的最大正整数因子,它们共同的因子中最大的一个。比如,24和36的最大公因数是12,因为12是24和36的所有公因数中最大的。例如,2、3、5和7都是素数。它们在数学中非常重要,因为任何大于1的自然数都可以唯一地表示为素数的乘积,这被称为素数分解。例如,对于数字4和6,它们的最小公倍数是12,因为12是4和6的所有倍数中最小的一个。其中,a 和 b 是要计算最小公倍数的两个数,GCD(a, b) 是它们的最大公因数。这个公式利用了最大公因数和最小公倍数之间的关系,使得计算过程更加高效。原创 2024-09-03 15:08:51 · 450 阅读 · 0 评论 -
【贪心算法】区间类算法题(整数替换、俄罗斯套娃、重构字符串等、C++)
贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优决策的算法。贪心算法通常用来解决最优化问题,其核心思想是通过局部最优解逐步推导出全局最优解。在贪心算法中,我们并不总是考虑到未来可能发生的情况,而是只关注当前的最优选择。这种贪心选择性质使得贪心算法特别适合解决那些具有最优子结构性质的问题,即局部最优解能够推导出全局最优解的问题。贪心算法的基本思路可以总结为以下几步:确定问题的最优子结构:问题的最优解可以通过子问题的最优解逐步推导得到。构造贪心选择。原创 2024-09-03 11:10:40 · 1130 阅读 · 0 评论 -
【算法】C++贪心算法解题(单调递增数字、坏了的计算器、合并区间)
【算法】贪心算法解析:基本概念、策略证明与代码例题演示。原创 2024-09-03 10:45:49 · 876 阅读 · 0 评论 -
dfs 解决 部分矩阵洪流/floodfill算法题(水流问题、扫雷游戏、衣橱整理、C++)
一般floodfill问题可以描述为:给定一个二维矩阵,其中每个元素代表一个像素点,并给定一个起始点、目标颜色和填充颜色。问题要求将以起始点为中心,与其相邻且具有相同颜色的所有区域都填充为目标颜色。原创 2024-09-02 20:25:24 · 809 阅读 · 0 评论 -
【动态规划】通过例题 理解 完全背包问题(完全背包、零钱兑换、完全平方数、C++)
完全背包问题是一种经典的动态规划问题,通常用于求解优化问题。在这个问题中,我们有一个背包和一组物品,每种物品有一个特定的重量和价值。与01背包问题不同的是,在完全背包问题中,每种物品可以无限次使用。原创 2024-09-02 15:12:01 · 885 阅读 · 0 评论 -
【动态规划】两个数组 / 字符串的dp问题(子序列、子数组问题、匹配问题、字符串问题)
两个数组或字符串的动态规划问题通常涉及到比较和匹配元素。最长公共子序列 (LCS) 问题问题描述给定两个字符串s1和s2,找出它们的最长公共子序列的长度。编辑距离问题问题描述给定两个字符串word1和word2,计算将word1转换为word2所需的最小操作次数(插入、删除、替换)。原创 2024-08-30 18:03:54 · 1099 阅读 · 0 评论 -
【算法】贪心算法解析:基本概念、策略证明与代码例题演示
在学习贪心算法之前,一定要理解的是贪心策略贪心策略是一种根据具体问题而定的策略:其由局部优先 -> 全局有限,解释如下把解决问题的办法分为若干步;解决每一步的时候,都选择目前看起来“最优”的解法最后结果希望得到最优解。原创 2024-08-30 17:25:58 · 1155 阅读 · 0 评论 -
【算法】递归、回溯、剪枝、dfs 算法题练习(N皇后、单词搜索、数独问题;C++)
DFS(深度优先搜索)是一种图遍历方法,通过尽可能深地访问图中的节点,然后回溯。可用于树的遍历、图的连通性检查等问题。递归:算法的一种方法,通过函数自身调用来解决问题。通常用于解决具有重复子问题的情况,如树形结构或分治策略。回溯:一种递归的策略,用于遍历所有可能的解。通过在探索每一步时进行“尝试”和“撤销”操作来找到问题的所有解。常用于解决排列组合问题。剪枝:优化算法的一种技术,通过提前终止不必要的计算或分支,以减少运算量。常用于回溯算法中,通过检测并排除不符合条件的解。一般对于这种题,可以。原创 2024-08-29 13:00:32 · 859 阅读 · 0 评论 -
【动态规划】背包问题 - 二维费用的01背包问题(一和零、盈利计划、珠宝的最高价值......)
关于动态规划的理解与例题,点击👇【动态规划】C++解决斐波那契模型题目(三步问题、爬楼梯、解码方法…)有了上面的经验,我们来解下面二维费用的 01 背包问题。原创 2024-08-28 18:10:03 · 804 阅读 · 0 评论 -
【动态规划】C++解决01背包问题(模板01背包、分割等和子集、目标和、最后一块石头的重量)
本文主要涉及动态规划解题(01背包类问题):包括【模板】01背包、分割等和子集、目标和、最后一块石头的重量原创 2024-06-04 10:14:02 · 1600 阅读 · 0 评论 -
【动态规划】C++解决回文串类算法题(最长/回文子串、分割回文串、回文子序列、最少插入次数)
本文讲解关于用动态规划解回文串类算法题:包含回文子串、最长回文子串、 分割回文子串Ⅲ/Ⅳ、最长回文子序列、让字符串成为回文串的最少插入次数原创 2024-05-30 18:30:18 · 1487 阅读 · 0 评论 -
【贪心算法】C++解决回文串、增减字符串匹配、分发饼干、跳跃游戏、加油站问题
本文介绍了用贪心算法解决一系列算法题:包括最长回文串、增减字符串匹配、分发饼干、跳跃游戏Ⅰ、Ⅱ,以及加油站问题;原创 2024-05-29 19:38:26 · 1227 阅读 · 0 评论 -
【贪心算法】C++ 解决算法题:买卖股票 / K次取反 / 按身高排序 / 优势洗牌
贪心算法在每一步选择中都采取当前状态下最优决策的算法。贪心算法通常用来解决最优化问题,其在贪心算法中,我们并不总是考虑到未来可能发生的情况,而是只关注当前的最优选择。这种贪心选择性质使得贪心算法特别适合解决那些具有最优子结构性质的问题,即局部最优解能够推导出全局最优解的问题。需要注意的是,贪心算法并不适用于所有的问题,因为并非所有问题都具有最优子结构性质。在某些情况下,贪心算法得到的结果可能并不是全局最优解,而只是一个较好的解。因此,在应用贪心算法时,需要仔细分析问题的特性,以确定贪心算法是否适用于该问题。原创 2024-05-28 16:55:44 · 1421 阅读 · 0 评论 -
【贪心算法&指针】C++ 解决子数组 / 子序列的相关问题(最大数、数组和减半的最小操作数、连续/递增序列)
贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优决策的算法。贪心算法通常用来解决最优化问题,其核心思想是通过局部最优解逐步推导出全局最优解。在贪心算法中,我们并不总是考虑到未来可能发生的情况,而是只关注当前的最优选择。这种贪心选择性质使得贪心算法特别适合解决那些具有最优子结构性质的问题,即局部最优解能够推导出全局最优解的问题。贪心算法的基本思路可以总结为以下几步:确定问题的最优子结构:问题的最优解可以通过子问题的最优解逐步推导得到。构造贪心选择。原创 2024-05-27 19:15:10 · 861 阅读 · 0 评论 -
【动态规划】C++ 子序列问题(递增子序列、数对链、定差子序列、斐波那契子序列...)
本文介绍了动态规划中的子序列问题,通过一系列例题对此类动态规划问题有较好的了解。原创 2024-04-24 09:00:39 · 1040 阅读 · 0 评论 -
【动态规划】C++ dp子数组问题(最大/最长:环形/子数组和、乘积最大/为正数、单词拆分、子串)
文章介绍了子数组类的dp问题,并通过一系列算法题加深对该类问题的解法理解。原创 2024-04-22 11:25:11 · 1293 阅读 · 0 评论 -
【动态规划】C++简单多状态dp问题(打家劫舍、粉刷房子、买卖股票的最佳时机...)
本文通过一系列例题进行对 简单多状态的dp问题的理解原创 2024-04-20 13:50:46 · 1236 阅读 · 0 评论 -
【动态规划】dp 路径问题(不同路径、路径最小和、地下城游戏...)
本文首先通过一篇文字理解动态规划与使用dp数组,最后用一些算法题详解解决动态规划中的路径问题原创 2024-04-19 15:18:20 · 1013 阅读 · 0 评论 -
【动态规划】C++解决斐波那契模型题目(三步问题、爬楼梯、解码方法...)
动态规划是一种解决复杂问题的算法设计技术,通常用于解决具有和性质的问题。它将问题分解成较小的子问题,通过解决这些子问题并保存其结果,最终构建出原问题的解。:问题可以被分解为相同的子问题,并且这些子问题在求解过程中会被多次重复计算。:问题的最优解可以由其子问题的最优解来构造。原创 2024-04-18 14:45:11 · 1066 阅读 · 0 评论 -
【算法】递归、回溯、剪枝、dfs 算法题练习(组合、排列、总和问题;C++)
文章主要关于使用dfs利用递归、回溯、剪枝的方法解决相关算法题:括号生成、目标和、组合总和、字母大小写全排列、优美的排列等原创 2024-02-21 13:57:01 · 1526 阅读 · 1 评论 -
【算法】{画决策树 + dfs + 递归 + 回溯 + 剪枝} 解决排列、子集问题(C++)
dfs问题我们已经学过,对于排列、子集类的问题,一般可以想到暴力枚举,但此类问题用暴力解法 一般都会超时,时间开销过大。对于该种问题,重点在于尽可能详细的画决策树,随后根据决策树分析 题目所涉及的剪枝、回溯、递归等细节问题。根据决策树的画法不同,题目会有不同的解法,只要保证决策树没有问题,保证细节问题下 代码一定可以编写出来。原创 2024-02-04 17:05:26 · 2565 阅读 · 0 评论 -
【算法】利用递归dfs解决二叉树算法题(C++)
我们曾学过前序遍历,其就是深度优先搜索的一种应用。在二叉树的前序遍历中,我们首先访问根节点,然后递归对左子树进行前序遍历,最后递归地对右子树进行前序遍历。在深度优先搜索算法中,我们从起始节点开始,递归地探索每个可达节点,直到没有未访问的相邻节点为止。因此,前序遍历也可以看作是对图或树进行深度优先搜索的一种方式。它遵循先访问根节点,然后递归地访问左子节点和右子节点的顺序。原创 2024-02-03 15:07:33 · 1173 阅读 · 0 评论 -
【算法】以汉诺塔理解递归、并用递归解决算法题
我们在学习数据结构 / 做算法题时,如二叉树、快排,归并等,会使用递归写代码。我们知道:递归就是函数调用自身的情况。而我们在写一个递归函数时,分为两个部分:终止条件(函数出口)和递归体。原创 2024-02-03 13:24:44 · 1147 阅读 · 0 评论 -
【算法】BFS解决拓扑排序类算法题(C++)
在数据结构中我们学过 拓扑排序以及图的相关知识,在这里我们进行简单的复习↓在数据结构拓扑排序是一种对有向无环图(DAG)进行排序的算法。在对于我们下面的解题,可以理解为拓扑排序是确定任务执行顺序的如果图中存在环路,那么该图就没有拓扑排序,可以由此利用拓扑排序判断图是否有环。原创 2024-01-30 20:20:51 · 1199 阅读 · 0 评论 -
【算法】BFS算法解决多源最短路问题(C++)
此前我们对 单源最短路 问题进行的讲解:画图来说,单源最短路问题即为:而对于多源最短路问题:自然是 利用BFS算法解决,下面提出解法:当我们将所有的源点作为一个源点来进行解题时,问题又变成了单源最短路问题,而为什么可以认为这种解法是正确的呢?我们对于 单源最短路 问题的bfs解法为:自然,对于 多源最短路 的bfs解法为:542.01矩阵1020.飞地的数量1765.地图中的最高点1162.地图分析原创 2024-01-28 20:30:26 · 1408 阅读 · 0 评论 -
【算法】使用BFS算法(队列、哈希等)解决最短路径问题(迷宫、基因变化、单词接龙、高尔夫)(C++)
我们这里主要探讨权值为1的最短路问题。而对于权值为1的最短路问题:即不考虑每个路径点的值,只考虑最短的路径是什么即可。原创 2024-01-24 11:24:08 · 1184 阅读 · 0 评论 -
【算法】利用模拟算法、规律解算法题(C++)
模拟算法即模拟问题过程来解决问题的算法。对于一些算法题,我们只需要将题目的过程 用代码编写出来,再结合其他方法,就可以解决。原创 2024-01-22 09:08:21 · 1323 阅读 · 0 评论 -
【算法】使用优先级队列(堆)解决算法题(TopK等)(C++)
优先级队列是一种常用的数据结构,用于解决许多算法问题。基于堆(Heap)实现,在每次操作中能够快速找到最大或最小值。使用优先级队列的典型算法问题包括:Top K 问题:查找列表中前 K 个最大或最小的元素。合并 K 个排序数组:将 K 个已排序的数组合并为一个有序数组。Dijkstra 算法:在加权图中找到从起点到目标节点的最短路径。Huffman 编码:使用最小堆构建前缀编码树来压缩数据。下面会挑选一些算法题并使用优先级队列进行解题。原创 2024-01-19 20:44:38 · 1112 阅读 · 0 评论 -
【算法】队列+bfs算法 解决树的相关算法题(C++)
队列与宽度优先算法(BFS)是解决很多算法问题的常见工具。BFS通过逐层遍历图或树的节点来寻找解决问题的最短路径或最短步骤。使用队列可以很好地支持BFS算法的实现。创建一个空队列,并将起始节点放入队列中。创建一个集合用于记录已经访问过的节点,防止重复访问。(visited数组,一般用于路径、迷宫问题)初始化其他必要的辅助数据结构,例如距离数组或状态数组等。开始循环,直到队列为空:从队列中取出一个节点作为当前节点。如果当前节点是目标节点,说明找到了解,结束搜索。原创 2024-01-17 22:20:04 · 1097 阅读 · 1 评论 -
【算法】使用栈解决一系列算法题(匹配、表达式、模拟)(C++)
栈适合解决需要后进先出(LIFO)的结构的相关算法题,本文根据对五道算法题的讲解,主要就使用栈模拟、计算表达式、匹配问题等原创 2024-01-16 21:00:17 · 1048 阅读 · 0 评论 -
【算法】算法(模拟、指针等)解决字符串类题目(C++)
字符串题目有很多种,这里筛选几个考察模拟、双指针等的题目,并用相关算法解决。原创 2024-01-15 17:50:52 · 1012 阅读 · 0 评论 -
【算法】了解哈希表/思想 并用哈希解算法题(C++)
简单了解哈希表并使用思想解算法题原创 2024-01-14 22:41:24 · 1120 阅读 · 0 评论 -
【算法】链表题的常用技巧及算法题(C++)
通过对链表常用技巧、操作的介绍首先通过几道例题进行使用;后通过一系列算法题进行链表题的熟练原创 2024-01-10 14:35:56 · 1306 阅读 · 0 评论 -
【算法】利用分治思想解算法题:快排、归并、快速选择实战(C++)
分治法将问题划分成多个相互独立且相同或类似的子问题,然后递归地解决每个子问题,并将结果合并以得到原始问题的解。分治思想通常包含以下三个步骤:分解解决合并核心思想是将一个复杂的问题分解成多个简单的子问题,通过递归地解决子问题,最终将子问题的解合并成原始问题的解。等。优缺点优点在于能够有效地降低问题的复杂度,提高算法的效率。缺点在于需要额外的空间和时间来处理子问题的合并过程。原创 2024-01-02 18:12:24 · 1275 阅读 · 0 评论 -
【算法】一维、二维前缀和 解决算法题(C++)
文章首先简要介绍前缀和算法,通过一道例题引入一维前缀和的模板,随后用多道算法题进一步加深对前缀和的使用、后用一道题引入二维前缀和的模板及使用。前缀和算法用于高效地计算数组或序列中某个区间内元素的和。前缀和数组是一个辅助数组,其每个元素存储原始数组从开头到当前位置的元素和。通过提前计算前缀和数组,可以在O(1)的时间复杂度内快速计算出任意区间内的元素和。原创 2024-01-02 17:20:58 · 1169 阅读 · 0 评论 -
【算法】使用位运算解算法题(C++)
文章首先对于位运算进行一个基础介绍,然后根据其基础引出一些基础特性,通过对这些基础特性的使用,可以解决一些算法题原创 2023-12-28 16:08:09 · 1289 阅读 · 0 评论 -
【算法】运用滑动窗口方法解决算法题(C++)
滑动窗口算法通常用于解决。该算法的基本思想是维护一个固定大小的窗口,通过该窗口在字符串或数组上滑动,从而寻找符合条件的子串或子数组。在每次窗口滑动时,我们只需要对窗口内的元素进行简单的更新,以便快速得到新的结果。文章通过一道题进行对滑动窗口算法的引入,再通过多道例题详解进一步加深对滑动窗口法的理解和运用。原创 2023-12-27 15:47:00 · 1118 阅读 · 0 评论 -
【算法】利用双指针法解决算法题(C++)
双指针并非真正意义上的指针,实际上一般使用下标表示/代替。通常用于处理数组或链表等数据结构。主要思想是使用两个指针在数组或链表中进行迭代、比较或操作。通过对一系列算法题理解双指针法的使用。原创 2023-12-24 15:18:32 · 1055 阅读 · 0 评论 -
【算法】使用二分查找解决算法问题:理解二分法思想,模板讲解与例题实践
文章通过两道例题进一步对二分算法的思想、性质和朴素模板进行总结,随后分析相关内容、最后再一同解决多道算法题原创 2023-12-22 21:31:46 · 1102 阅读 · 0 评论 -
【算法】bfs与dfs算法解决FloodFill(图像渲染、岛屿问题、区域)问题(C++)
介绍了洪流问题(floodfill) 的解题方法,通过具体例题,以深度优先搜索和宽度优先搜索的思路:即dfs使用递归、bfs使用队列的解题方法原创 2023-12-17 10:24:11 · 1274 阅读 · 0 评论