自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 快慢指针巧判回文链表(LC234回文链表)

该代码实现单链表回文判断,采用快慢指针定位中点后反转后半链表,再比较前后半节点值。时间复杂度O(n),空间复杂度O(1)。主要步骤包括:处理空链表边界条件;快慢指针寻找中点;反转后半链表;逐一比较节点值。算法优势在于仅使用常量额外空间,通过链表反转替代额外存储,高效完成回文验证。

2025-11-05 17:27:57 389

原创 C++实现:删除排序链表重复元素

本文介绍了一个C++实现的删除排序链表中重复元素的算法。通过遍历链表,当发现相邻节点值相同时跳过重复节点并释放内存,确保每个元素只出现一次。算法处理了空链表边界条件,时间复杂度为O(n),空间复杂度为O(1)。该解法针对已排序链表设计,能高效移除重复元素,适合处理有序链表数据。代码包含详细注释,清晰地展示了指针操作和内存管理过程。

2025-11-05 16:14:56 372

原创 三指针巧解链表反转难题(LC206.反转链表)

摘要: 反转链表问题采用双指针迭代法,通过pre、cur、next三指针实现节点指针方向反转,时间复杂度O(n),空间复杂度O(1)。对比递归法(O(n)栈空间)、栈辅助法等,迭代法效率最优。核心思想是动态修改指针指向,需提前保存next节点防止断链。该模式可扩展至局部反转、K组反转等问题,适用于内存管理、网络协议等场景。递归实现简洁但可能栈溢出,工业推荐迭代优化版,注重指针语义化命名与边界处理。链表问题的本质在于指针关系重构,而非单纯遍历。

2025-11-01 16:13:09 292

原创 棒球得分模拟:栈的巧妙应用(力扣682)

这是一道栈结构应用题目,考察对操作序列的模拟处理。题目要求实现一个记录系统,处理包含数字、"+"、"D"、"C"四种操作,最终计算总分。解决思路是使用栈结构存储得分,根据操作类型进行相应处理:数字入栈、"+"取栈顶两数求和、"D"双倍栈顶元素、"C"弹出栈顶。算法时间复杂度O(n),空间复杂度O(n)。类似问题包括逆波兰表达式、括号匹配等,这类操作序列处理问题通常适合用栈结构解决。

2025-10-16 10:15:21 260

原创 力扣58题“最后一个单词长度”类似问题解法总结

本文总结了字符串处理问题的分类与解法,主要包括四类问题:边界定位、字符统计、分割提取和模式匹配。针对每类问题提供了通用解题模板和关键技巧,如滑动窗口、状态管理和边界处理等。文中还分析了不同问题的复杂度,并给出典型代码示例,如最长公共前缀和单词反转的实现。这些方法覆盖了字符串处理中的常见场景,能有效提升解题效率。

2025-10-15 15:38:00 222

原创 罗马数字转整数的奥秘

罗马数字转整数的算法通过建立字符-数值映射表,从左到右遍历字符串,比较相邻字符值决定加减:若当前字符值小于右边字符则减,否则加。该算法时间复杂度O(n),空间复杂度O(1),能正确处理IV、IX等特殊情况。测试验证了"III"→3、"IV"→4、"MCMXCIV"→1994等用例的正确性。核心在于分析转换规则并用代码实现这种映射关系。

2025-10-15 15:25:18 275

原创 依赖注入的解释

依赖注入(Dependency Injection, DI)是IoC(控制反转)的一种实现方式。依赖注入就是:把一个对象需要用到的其它对象(依赖),由外部“注入”进来,而不是自己在内部 new 出来。依赖注入(DI) = 由容器(如 Spring)负责把依赖对象传入,而不是类自己创建。

2025-10-15 10:07:48 424

原创 Spring IoC对比解释

IoC全称Inversion of Control(控制反转),是 Spring 框架的核心思想。对象的创建与依赖关系的管理不再由开发者手动 new,而是交给 Spring 容器自动完成。📦 换句话说:Spring IoC 就是一个“帮你创建对象并自动注入依赖”的工厂。Spring IoC:让你专注业务逻辑,不用关心对象如何创建和装配。没有 IoC 时:像在函数里自己手动malloc或new对象。有 IoC 时:系统帮你提前准备好了需要的实例,你只要声明“我需要它”,系统就注入给你。

2025-10-15 10:06:35 300

原创 Java与C的null大对比:安全VS风险

Java和C语言中的null特性对比:Java的null是内置字面量,有专门类型,访问会抛出异常;C的NULL是宏定义,本质为0,解引用会导致未定义行为。主要区别在于类型系统严格性、错误处理机制和底层实现方式:Java通过异常确保安全性,C依赖程序员规避风险。实际应用中,Java需要显式null检查但调试直观,C的指针操作更灵活但错误更隐晦。

2025-10-14 21:05:03 193

原创 Java跨平台的运行原理

摘要:Java的跨平台机制通过"编写一次,到处运行"实现。开发者编写的Java代码被编译为平台无关的字节码,由各平台的JVM动态转换为本地机器码执行。核心在于JVM作为中间层统一处理字节码指令,并通过类加载器、执行引擎等组件适配不同系统。实际应用中需注意版本兼容性,现代JVM通过热点检测、JIT编译等技术优化性能。这种机制使Java程序无需针对每个操作系统重新编译,实现真正的跨平台运行。

2025-10-14 20:41:22 384

原创 C++行指针:二维数组操作精髓

本文介绍了C++中行指针的概念及其在二维数组处理中的应用。行指针是指向二维数组中某行的指针,声明形式为数据类型(*指针名)[列数],与列指针的区别在于指针算术的行为不同。文章详细阐述了四种二维数组作为函数参数的传递方法:固定列数的行指针方式、动态数组的指针指针法、通用性强的扁平化传递以及类型安全的模板方式。最后对比了各方法的特性,建议现代C++开发中:静态数组优先使用模板方式,动态数组推荐使用vector<vector<T>>,需要高性能时可考虑扁平化法结合vector或智能指针。

2025-10-14 20:20:07 320

原创 C++头文件为何慎用using namespace std

摘要: 在C++头文件中使用using namespace std会导致命名空间污染,可能引发命名冲突、意外行为改变和调试困难。问题根源在于头文件被多个源文件包含时,std命名空间的全部内容会被隐式引入,可能与用户自定义类(如vector、string)冲突。 正确做法: 显式使用std::前缀(推荐),如std::vector; 仅在函数内部或源文件中局部使用using namespace std; 选择性引入特定名称,如using std::cout。 核心原则: 头文件应保持命名甘油净,避免全局污染,

2025-10-14 16:06:39 283

原创 c++结构体在头文件中的使用

本文总结了C++结构体在头文件中的常见使用方式。主要内容包括:1)基本结构体定义及构造函数的使用;2)结构体在顺序表等数据结构中的应用;3)类内部嵌套结构体的实现;4)复杂结构体(如日期、员工信息)的示例。文章通过代码示例展示了如何将结构体合理组织在头文件中,并分析了这种做法的优势:保证声明完整性、模板友好性、内联支持和编译效率。最后给出了头文件中使用结构体的注意事项,如避免定义大型非内联函数等。

2025-10-14 15:44:28 425

空空如也

空空如也

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

TA关注的人

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