自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】可调用对象,包装器function,适配器bind

本文展示了C++中可调用对象的使用方法,包括普通函数、lambda函数、仿函数、类的成员函数等。通过function和bind工具可以灵活地绑定这些不同类型的函数对象。文章提供了多个示例:处理函数重载、绑定成员函数、使用仿函数等,并演示了如何用模板统一处理各种可调用对象。最后给出了完整的测试代码和运行结果,展示了不同绑定方式的正确用法。这些技巧在多线程编程等场景中非常实用。

2025-11-16 22:20:09 209

原创 【Oracle】锁的争执

摘要:在使用PL/SQL Developer查询远程表时会产生"临时共享锁",即使未commit也可能会残留。当C++程序执行插入操作(产生排他锁)时,若查询界面保持打开状态,共享锁未及时释放会导致ORA-02049分布式事务锁等待超时错误。解决方法:1) 关闭查询结果界面;2) 执行commit命令。该问题源于Oracle共享锁的释放延迟特性,特别是在会话保持连接时锁可能短暂残留。

2025-11-13 19:53:32 126

原创 【设计模式】简单工厂模式、工厂模式、抽象工厂模式

这篇文章通过三种工厂模式(简单工厂、工厂模式、抽象工厂)的代码示例,展示了多态在面向对象编程中的实际应用。简单工厂模式使用单一工厂生产不同产品,但违反开闭原则;工厂模式通过抽象工厂类实现开闭原则,每个工厂生产一种产品;抽象工厂模式则处理产品族的创建,强调产品等级结构。文章特别强调了虚析构函数的重要性,确保通过父类指针删除子类对象时能正确释放内存。这些模式深化了对多态的理解,展示了如何通过抽象类和虚函数实现灵活的代码扩展。

2025-10-16 11:59:24 790

原创 【设计模式】单例模式---C++

单例模式实现类只能创建一个实例,分为饿汉式和懒汉式。饿汉式在类加载时即创建实例,线程安全;懒汉式延迟初始化,但多线程下存在安全问题。解决方案包括:双重检查锁定(需加锁)、原子操作或C++11的静态局部变量(线程安全)。静态局部变量利用全局数据区特性,由编译器保证首次访问时线程安全的初始化。代码示例展示了两种模式的实现及线程安全处理方式。

2025-10-14 21:46:49 593 3

原创 【C++】leetcode127---bfs

这篇文章展示了一个使用BFS算法解决单词转换问题的C++实现。代码定义了一个Solution类,通过广度优先搜索在给定的单词列表(wordList)中寻找从beginWord到endWord的最短转换路径,每次只能改变一个字母。主要步骤包括:初始化数据结构,BFS层级遍历检查相邻单词,记录路径长度。若找到目标单词则返回路径长度,否则返回0。该实现使用了队列进行BFS遍历,并通过标记已访问单词来避免重复处理。

2025-10-11 22:55:26 362

原创 【C++】leetcode827---广度优先算法(bfs)

这篇文章提出了一种优化岛屿面积计算的方法。主要思路是:1) 使用BFS遍历网格,标记每个岛屿的编号和大小,并记录相邻海洋坐标;2) 在处理相邻海洋时,通过哈希表避免重复计算已访问岛屿的面积。作者发现直接拷贝岛屿大小数据会导致超时,改用unordered_set来记录已访问岛屿编号,显著提高了效率。该方法在LeetCode题目"Making A Large Island"中有效解决了时间复杂度问题,通过避免不必要的数据拷贝优化了算法性能。

2025-10-10 22:54:34 618

原创 【C++】孤岛问题---DFS版本和BFS版本

该代码提供了两种解决"孤岛问题"(统计矩阵中连通1的块数)的方法:DFS和BFS版本。两种方法都通过遍历矩阵,当遇到未被访问的1时,使用深度优先或广度优先搜索标记所有相连的1为一个连通块,并增加计数器。DFS使用递归实现,BFS借助队列实现,两者都能正确统计连通块数量。核心思想是使用二维数组记录访问状态,通过方向数组处理相邻单元格,确保每个连通块只被计数一次。输入为矩阵行列数和矩阵元素,输出为连通块总数。

2025-10-08 22:11:18 500

原创 【C++】leetcode40题---回溯

这段代码实现了组合求和问题中的去重逻辑。当处理排序后的数组(如[1,2,2,2,5])时,通过判断当前元素与前一个元素是否相同,并且前一个元素未被使用(used[i-1]==0),来跳过重复组合。这种"树层去重"方法确保在递归过程中不会产生相同的组合,比如避免重复使用相同的2来构成[1,2,2]。算法通过回溯遍历所有可能的组合,仅保留满足target=5且不重复的有效解。

2025-10-04 11:06:08 576

原创 【C++】leetcode93--回溯

这篇文章讨论了解决IP地址恢复问题的两种回溯算法实现。第一种方法使用全局字符串拼接,需要注意处理前导零和边界条件,如移除多余的点;第二种方法使用vector存储每段数字,最后统一拼接,更简洁且避免手动处理点的问题。两种方法都强调了对前导零(如"01")和数值范围(0-255)的检查,以及IP地址必须恰好4段的限制。文章通过代码对比展示了不同实现方式的优缺点,为处理类似字符串分割问题提供了参考思路。

2025-10-03 18:18:50 295

原创 【C++】leetcode131--回溯

文章摘要 该算法通过回溯法查找字符串的所有回文分割方案。每次递归时,逐步构建子串并检查是否为回文:若是回文则继续分割剩余部分,否则回溯。当遍历完整个字符串时,将当前有效的分割方案存入结果。关键点在于动态生成子串并验证回文性,利用回溯确保所有可能的分割路径都被探索。最终返回所有满足条件的回文分割组合,时间复杂度主要取决于字符串的回文分布情况。

2025-10-03 15:51:53 497

原创 【C++】leetcode17---回溯

本文对比了两种解决电话号码字母组合问题的方法。第一种方法通过多个条件判断和辅助函数处理不同长度的输入,虽然能通过测试但代码冗长。第二种方法采用回溯算法,通过递归和状态回退来生成所有组合,代码更简洁高效。回溯法的核心在于将digits长度作为递归层数,通过count变量跟踪当前处理位置,在递归过程中构建组合字符串。当count等于digits长度时保存结果,否则继续处理下一个数字对应的字母。这种方法避免了多重条件判断,更符合算法设计原则,展示了回溯在处理组合问题时的优势。两种实现都使用了相同的数字到字母的映射

2025-10-02 19:04:35 320

原创 【C++】leetcode71题---栈

本文介绍了使用栈结构来简化Unix文件路径的算法。关键思路是遍历路径字符串,遇到非"/"字符时提取子串,根据子串内容对栈进行操作:遇到"."跳过,遇到".."弹出栈顶元素(除非栈为空),其他情况压入栈。最后将栈中元素组合成规范路径。示例展示了路径"/.../a/../b/c/../d/./"的处理过程,说明算法如何通过栈操作来消除冗余路径信息,最终输出简化后的路径。

2025-10-01 17:38:11 393

原创 【C++】leetcode347题---优先级队列或哈希表

本文介绍了两种方法求解数组中前K个高频元素的问题。方法一使用优先级队列(小根堆),通过自定义比较器实现按元素频率排序,保持堆中始终有K个元素,最后输出结果。方法二利用哈希表统计元素频率,再通过multimap自动排序,倒序遍历前K个元素获取结果。两种方法各有特点,优先级队列更高效,而哈希表方法思路直观易理解。文章还对比较器的工作原理进行了详细解释,帮助理解小根堆的实现机制。

2025-10-01 15:52:43 752

原创 【C++】leetcode239题----采用双端队列

本文介绍了使用双端队列(deque)解决滑动窗口最大值问题的方法。通过维护一个队列,始终保持队首元素为当前窗口的最大值。关键步骤包括:初始化前k个元素的队列,每次滑动窗口时检查移出元素是否为最大值,并确保新元素入队时移除所有小于它的元素。特别指出在比较时不能使用"≤",否则会导致队列中保留相同最大值的情况处理不当,影响结果准确性。文章结合具体示例说明了错误原因,并提供了完整代码实现。该方法有效解决了滑动窗口最大值问题,时间复杂度优于暴力解法。

2025-09-30 21:52:40 195

原创 【C++】leetcode18题---利用到15题三数之和

该代码实现了一个四数之和的算法。主要思路是:先对数组排序,然后使用双重循环固定前两个数,再使用双指针法寻找后两个数,使四数之和等于目标值。关键点包括:1)数组排序;2)跳过重复元素去重;3)双指针法高效查找;4)处理大数溢出问题。算法时间复杂度为O(n³),空间复杂度为O(1),适用于解决类似LeetCode 18题的四数之和问题。

2025-09-28 14:49:37 410

原创 【FTP】出现550错误的解决办法----删除FTP服务端的文件失败!!

FTP文件删除失败问题解决方案 当FTP服务端删除文件出现550错误时,主要原因是登录用户对目标文件和所在文件夹缺乏写权限。解决方法如下: 使用ls -l检查文件权限,ls -ld检查文件夹权限 确认登录用户属于文件权限中的所有者、组还是其他用户 使用chmod命令修改权限,如: chmod -R u=rwx,g=rx,o=rwx /目标路径 确保用户对文件和父目录都有写权限(w) 修改权限后,普通用户即可成功删除文件。

2025-09-27 17:57:42 631 1

原创 【C++】leetcode142--使用map容器

该代码实现了一个检测链表环入口节点的算法。使用哈希表记录已访问的节点,遍历链表时检查当前节点是否已被记录。若遇到已记录的节点,则返回该节点(环的入口);若遍历结束未发现重复节点则返回NULL。时间复杂度O(n),空间复杂度O(n)。核心思路是通过哈希表实现节点访问状态的追踪。

2025-09-27 13:05:49 164

原创 【C++】leetcode19题--使用栈

该代码实现了一个删除链表倒数第n个节点的算法。主要思路是:先将所有节点压入栈中,然后逐个出栈,当出栈到第n个节点时,将其前驱节点的next指针指向该节点的后继节点,从而完成删除操作。特殊情况处理当需要删除头节点时,直接返回head->next。算法通过栈结构实现从后往前遍历链表,时间复杂度O(n),空间复杂度O(n)(使用栈存储所有节点)。

2025-09-27 00:20:22 661

原创 【C++】leetcode206题--双指针

这段代码实现了一个单链表的反转功能,采用迭代方式处理。主要步骤包括:处理空链表或单节点情况;设置两个指针cur和left分别指向头节点和第二个节点;通过循环依次反转节点指向,直到倒数第二个节点;最后处理末尾节点的链接。代码逻辑清晰,通过临时变量保留被破坏的指针,确保链表在反转过程中不会丢失节点信息。时间复杂度为O(n),空间复杂度为O(1)。

2025-09-26 23:31:16 169

原创 【C++】leetcode27题

这篇代码实现了一个从数组中移除指定元素的算法。它使用双指针法,左指针从数组起始位置开始寻找等于目标值的元素,右指针从末尾开始寻找不等于目标值的元素。当找到符合条件的左右元素时进行交换,最终返回移除后数组的长度。该方法的时间复杂度为O(n),空间复杂度为O(1),是一种高效的就地修改数组的解决方案。

2025-09-23 13:46:39 123

原创 【C++】leetcode669题--递归版本

摘要:修剪二叉搜索树时,根据当前节点值的不同情况处理:1) 节点值在[low,high]范围内,则保留该节点并递归处理其左右子树;2) 节点值小于low,则直接返回右子树处理结果(左子树必然不满足);3) 节点值大于high,则直接返回左子树处理结果(右子树必然不满足)。该方法利用二叉搜索树性质,通过递归实现高效修剪。

2025-09-21 11:43:51 115

原创 【C++】leetcode450题--递归版本

【代码】【C++】leetcode450题--递归版本。

2025-09-20 21:05:39 84

空空如也

空空如也

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

TA关注的人

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