自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 详解一下马拉车算法 Manache算法 使用c++

Manacher算法的核心思想是利用已经计算出的回文信息来避免重复计算。通过维护当前最右的回文边界,算法可以在大多数情况下直接得到一个很好的初始回文半径.既计算了原字符串中对应的回文长度,又恰好表示了以该位置为中心的不同回文数量。这个巧妙的关系使得我们可以快速计算所有回文子串的数量,而不需要逐一枚举。最后让我详细解释一下为什么在预处理字符串中,每个回文长度对应原字符串中的。马拉车算法是寻找最长回文子串的高效算法,时间复杂度为O(n)2.变量有,回文半径组p,回文中心c,右边界r.

2024-07-14 11:05:58 136

原创 使用c++进行大规模的矩阵运算

算法通过分块矩阵乘法和多线程并行计算实现了大规模矩阵乘法的高效计算。这只是一个简略的算法,具体需要根据实际情况进行修改。

2024-07-06 22:01:52 286

原创 矩阵的乘法 c++

算法的思想就是将矩阵乘法问题分解为矩阵元素相乘的子问题。

2024-07-05 23:05:29 110

原创 快速幂学习 c++ LeetCode 372超级次方

是一个非常大的正整数且会以数组形式给出。使用了多种方法提升效率。

2024-07-05 22:34:06 198

原创 使用C++实现求职者和部门之间最大配对

某人力资源公司收到了m个合格的求职者的简历,要将他们分发给n个部门,每份简历符合一个或者几个部门的要求,但是每个人的简历最多送给k个部门,每个部门最多可以接受d份简历,如何实现求职者和部门之间的最大配对。使用了最大流算法来解决问题,其中将每份简历最多送给k个部门和每个部门最多接受d份简历的问题通过构建一个流网络来解决。我们使用Ford-Fulkerson算法来实现这个最大流问题的解决。

2024-07-05 16:36:14 171

原创 图论学习 c++Ford-Fulkerson 方法

Ford-Fulkerson算法是用于求解最大流问题的一种经典算法。其核心思想是通过不断寻找增广路径来增加流量,直到找不到增广路径为止。每次找到一条增广路径,就增加相应的流量,更新残余网络。简单来说就是Ford-Fulkerson算法的工作过程,即不断寻找增广路径并增加流量,直到无法找到增广路径为止。

2024-07-05 14:04:36 630

原创 做一个自动校正英文拼写错误的程序 使用c++

概述一个自动校正英文拼写错误的程序的基本的方法,并提供一个简化的C++实现。这个方法基于编辑距离(Levenshtein距离)和一个预定义的词典。

2024-07-04 23:14:46 318

原创 动态规划 剪绳子问题

当然可以使用更有效的解法,但是需要一点数学知识这个优化的算法基于一个数学发现:当绳子长度大于3时,尽可能多地切出长度为3的片段会得到最大乘积。如果最后剩下的长度为1,我们应该将其与一个3合并,形成一个长度为4的片段。给一段长度为n的绳子,请把绳子剪成m段,每段绳子的长度为k[0],k[1],k[2],k[3]....k[m].请问k[0]这个实现使用了动态规划的方法来解决问题。这个算法的时间复杂度为O(n^2),空间复杂度为O(n)。k[2].....*k[m]的最大乘积为多少。

2024-07-02 23:17:12 566

原创 机器人运动范围检测 c++

地上有一个m行n列的方格,一个机器人从坐标(0,0)的格子开始移动,它每次可以向上下左右移动一个格子,但不能进入行坐标和列坐标的位数之和大于k的格子,请问机器人能够到达多少个格子。这个算法的时间复杂度为O(mn),其中m和n分别是网格的行数和列数。空间复杂度也是O(mn),主要用于存储visited数组和BFS队列。这个实现使用了广度优先搜索(BFS)算法来解决问题。

2024-07-02 23:00:31 782

原创 使用c++ 解释

快速排序 c++ 个人感觉比较简单易懂,为每行都加上了注释。

2024-07-01 23:23:46 103

原创 实现singleton模式

设计一个类,我们只能生产该类的一个实例,使用c++演示。

2024-06-30 21:22:42 249

原创 赋值运算符函数 c++

的类,其中包含了构造函数、拷贝构造函数和析构函数。现在,让我们为该类型添加赋值运算符函数。赋值运算符函数的目的是允许将一个对象的值赋给另一个对象。在这里,我们需要重载。的对象可以通过赋值操作来复制另一个对象的值。这段代码定义了一个名为。

2024-06-30 19:20:55 301

原创 给定一点32位或者64位的二进制,如何有效的数出其中为1的数量 c++

【代码】给定一点32位或者64位的二进制,如何有效的数出其中为1的数量 c++

2024-06-29 23:43:43 98

原创 c++ 给定一个非常巨大的数组,如何找到它的中值

缺点是结果是近似值,不是精确的中位数。精确度可以通过增加桶的数量来提高,但会增加空间复杂度。基于分块的近似算法(适用于超大数据集)快速选择算法(最优解)

2024-06-29 23:32:16 361

原创 一个未排序的序列号里有n个元素,如何找到其中最大的k个元素 使用c++

使用简单的堆排序算法。

2024-06-29 23:25:22 69

原创 求一个集合里面的所有子集 使用c++

【代码】求一个集合里面的所有子集 使用c++

2024-06-29 22:41:43 307

原创 使用c++回旋打印二叉树的节点

这个算法的时间复杂度是 O(n),其中 n 是树中节点的数量,因为每个节点都被访问一次。空间复杂度也是 O(n),主要是由队列和存储每一层节点的向量所占用的空间决定的。设计一个算法来回旋打印二叉树的节点。这个算法的基本思想是使用层序遍历(广度优先搜索)来访问树的节点,但是在打印时交替改变方向。下面是用C++实现的代码。

2024-06-29 19:05:50 176

原创 使用c++设计一个计算器

使用c++设计一个简单的计算器,它支持不带括号的四则运算,计算器要满足先乘除后加减的规则。这个计算器能够正确处理不带括号的四则运算,并且遵循先乘除后加减的规则。

2024-06-29 16:38:16 305 2

原创 排序问题学习c++ 跑步比赛

问题是假定有25名短跑选手争夺前三名,赛场上有五条赛道,一次可以有五名选手同时比赛,比赛不计时,只看相应的名次,假如选手的发挥是稳定的,最少几次比赛才可以决出前三名。

2024-06-29 15:07:52 237

原创 c++ 解决区间最大数和矩阵最大面积

第二个问题,在一个二维矩阵中,寻找一个矩阵的区域,使其中的数字之和达到最大值,著名的"最大子矩阵和"问题。对于更大的矩阵,存在更高效的算法,如使用二维线段树或者二维树状数组的方法,它们可以将时间复杂度降低到O(n^2 log n)或O(n^2)。这个算法的时间复杂度是O(n^3),其中n是矩阵的边长(假设矩阵是方阵)。这个算法比简单的滑动窗口方法更有效,因为它可以处理包含负数的情况,并且可以在一次遍历中找到最长的符合条件的子数组。这个算法的时间复杂度是 O(n),空间复杂度也是 O(n)。

2024-06-28 23:48:28 287

原创 回溯法c++学习 解决八皇后问题

的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?这个问题可以推广为更一般的n 皇后摆放问题,其中棋盘的大小变为n×n ,而皇后个数也变成n。),其中N是棋盘的大小(在这里是8)。这是因为在最坏的情况下,我们需要尝试所有可能的排列。空间复杂度是O(N),主要用于递归调用栈和存储棋盘状态。这个解决方案使用了回溯法,它通过系统地尝试所有可能的配置来找到所有有效的解。每当发现当前路径不可行时,它就回溯并尝试下一个可能的选择。八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8。

2024-06-28 22:04:15 816

原创 c++算法学习,最大区间

这个算法的时间复杂度是O(n),其中n是数组的长度,因为我们只需要遍历数组一次。空间复杂度是O(1),因为我们只使用了常数额外空间。这个算法非常高效,它能在一次遍历中找到最大子数组和,而不需要考虑所有可能的子数组(这将需要O(n^2)的时间复杂度)。给定一个实数序列,设计一个最有效的算法,找到一个总和数最大的区间。

2024-06-28 20:29:29 228

原创 图论学习 c++长方体嵌套问题

一个长,宽,高为X1,X2,X3的长方体之中算法可以存放一个长,宽,高Y1,Y2,Y3的长方体。但是,请注意,长方体的长宽高是可以旋转的,当X1小于Y1,X2小于Y2,X3小于Y3时,两个长方体固然可以嵌套,但是如果X2小于Y1,X1小于Y2, X3小于Y3,他们依旧可以互相嵌套。这个新的实现考虑了长方体所有可能的旋转情况,包括您提到的例子(X2小于Y1,X1小于Y2,X3小于Y3)。这个算法的时间复杂度是O(1),因为我们总是处理固定数量(3个)的元素,尽管我们检查了所有排列。空间复杂度也是O(1)。

2024-06-28 20:16:42 554

原创 图论学习3 c++ 动态规划

使用c++设计一个自动校正英文拼写错误的程序。

2024-06-28 17:51:31 230

原创 c++ 图论学习3

使用 C++ 来实现一个针对企业内部文件的网络爬虫,尽可能利用 C++的新特性和图的遍历算法。为了方便理解下面为每一行代码都配上了注释。

2024-06-28 16:20:42 381

原创 c++ 图论2 深度优先算法和广度优先算法

修改一下深度优先算法和广度优先算法,标出每一个节点相对于遍历起始位置的层级,遍历起始起点为第一层,和第一层相连的节点为第二层,以此类推。,其中包含了树中所有节点及其对应的层级。DFS 通常会以前序遍历的顺序返回节点,而 BFS 会按照层序遍历的顺序返回节点。这两种算法都会返回一个。深度优先搜索(DFS)

2024-06-27 23:12:34 313

原创 c++学习 图论1

DFS 的核心思想是深入地搜索树的分支。在这个例子中,我们可以使用所有可能的路径才能确定最小宽度。BFS 的核心思想是逐层遍历树,所以它能保证首先找到最小宽度的叶子节点。使用c++来写一个bfs和dfs。

2024-06-27 22:30:36 377

原创 最大流的学习代码,匹配问题的学习 使用c++

它不仅可以处理完美匹配,也可以处理不完全匹配的情况,是一个非常通用和强大的方法。2.当调用addPossibleMatch时,TaxiMatcher调用Graph中的maxFlow方法,计算从源点到汇点的最大流,这个最大流值就是最大匹配数。使用一个例子学习最大流和匹配问题,假如某地有n个出租车司机和m个正在打车的乘客,他们应该如何匹配;TaxiMatcher 类是一个高层抽象,它使用 Graph 类来解决出租车匹配问题。3.构造函数创建了一个n+m+2个顶点的图(n个司机,m个乘客,1个源点,一个汇点)

2024-06-27 21:41:26 707

原创 在一个二维矩阵中寻找一个矩阵的区域,使其中的数字之和达到最大值

这个算法的时间复杂度是 O(n^3),其中 n 是矩阵的行数和列数中的较大者。虽然这不是最优的解法(存在 O(n^3) 的解法),但它相对容易理解和实现。这个问题是二维最大子矩阵和问题,是一维最大子数组和问题的扩展。我们可以使用动态规划和 Kadane 算法的思想来解决这个问题。这个算法可以处理包含正数、负数和零的整数矩阵。它也可以处理全负数的情况,在这种情况下,它会返回矩阵中最大的单个元素。空间复杂度是 O(n),因为我们使用了一个额外的数组来存储列的和。

2024-06-23 23:03:22 240

原创 给定一个实数序列,设计一个最有效的算法,找到一个总和最大的区间

这个算法的时间复杂度是 O(n),其中 n 是数组的长度。它只需要遍历数组一次,因此是非常高效的。空间复杂度是 O(1),因为我们只使用了几个额外的变量,不管输入数组的大小如何。这个问题是经典的最大子数组和问题,也称为 Kadane 算法。我们可以使用动态规划的方法来高效地解决它。这个算法可以处理包含正数、负数和零的实数序列。它也可以处理全负数的情况,在这种情况下,它会返回数组中最大的单个元素。

2024-06-23 22:57:09 297

原创 利用与和非运算实现布尔代数中的与或非

使用C++来实现布尔代数中的与、或、非运算,只使用与(AND)和非(NOT)运算。一个很好的逻辑设计练习。

2024-06-23 22:27:04 106

原创 LeetCode 70. 爬楼梯 使用c++解答

假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?n = 22有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶n = 33有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶是一道有趣的题目,可以用来当成动态规划的入门练习和prev2prev1prev2。

2024-06-22 21:40:20 722

原创 LeetCode 40. 组合总和 II c++解答

使用深度优先搜索(DFS)来求解组合总和问题的算法。中的每个数字在每个组合中只能使用。给定一个候选人编号的集合。解集不能包含重复的组合。中所有可以使数字和为。

2024-06-21 17:00:52 185

原创 LeetCode 32. 最长有效括号

给你一个只包含'('和')'的字符串,找出最长有效(格式正确且连续)括号子串的长度。s = "(()"2最长有效括号子串是 "()"4最长有效括号子串是 "()()"s = ""0'('')'可以通过使用栈和动态规划两种方法来解决。

2024-06-20 23:56:57 661

原创 看到了一道有意思的面试算法题

题目:输入6个数,前五个数可以使用加减乘除和括号组成一个表达式,表达式的值要等于第6个数,求出所有表达式的组合。(注: 不能使用stl库)。下面是c++的解题方法:使用回溯算法来生成所有可能的表达式组合,并逐个验证是否满足条件。

2024-06-20 22:12:19 71

原创 LeetCode 28题找出字符串中第一个匹配项的下标

通过使用 KMP 算法,可以高效地在haystack中查找needle的第一个匹配项的位置,时间复杂度为 O(m + n),其中 m 是haystack的长度,n 是needle的长度。这种方法利用部分匹配表,在匹配过程中避免了回溯,使得算法效率得到了显著提升。但是对于不熟悉kmp算法的人下面的一种方法更加简单public:// 获取 haystack 的长度// 获取 needle 的长度// 遍历 haystack,确保剩余长度足够容纳整个 needle++i) {int j = 0;

2024-06-20 20:31:33 523

原创 LeetCode 第17题

在学习了他人的思路后我使用了下面的算法,是一个经典的递归(深度优先搜索,DFS)实现,用于生成电话号码的字母组合。每个数字按电话键盘的映射对应多个字母,代码通过递归逐步构建每个可能的组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。的字符串,返回所有它能表示的字母组合。运行时间可以达到最短,但是所需要的内存很大。我最开始是使用了一个回溯函数来解题。运行时间稍长但是需要内存极少。

2024-06-20 11:47:06 319

原创 将无向图的邻接矩阵转为对应邻接表的算法,使用c语言

【代码】将无向图的邻接矩阵转为对应邻接表的算法,使用c语言。

2023-07-17 17:35:27 502

原创 PAT 1005 Spell It Right

PAT题目

2023-04-10 14:41:11 155

原创 广度优先搜索(BFS)算法实现二叉树层序遍历的 C++ 代码

函数接受一个树的根节点,并返回一个二维向量,其中每个子向量表示树的一层节点的值。然后我们创建一个队列,并将根节点入队。接着,我们执行一个循环,在每次循环中处理当前队列中的所有节点。在处理每个节点时,我们将该节点的值加入到当前层的向量中,并将该节点的子节点入队。循环结束后,我们将当前层的向量加入到结果向量中,并重复以上操作直到队列为空。该算法的时间复杂度为 O(N),其中 N 是树的节点数。在最坏情况下,即当树是一颗平衡二叉树时,队列的长度会达到最大值,即 N/2,因此空间复杂度为 O(N)。

2023-03-11 10:47:24 563

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除