- 博客(8)
- 资源 (1)
- 收藏
- 关注
原创 面向对象设计原则
面向对象设计的核心原则是提高系统可维护性和抵御变化能力。主要包括:依赖倒置(稳定模块依赖于抽象)、开放封闭(可扩展不可修改)、单一职责(一个类一个变化原因)、Liskov替换(子类可替换基类)、接口隔离(小而完备的接口)。此外,应优先使用对象组合而非继承,封装变化点,针对接口而非实现编程。这些原则共同实现"高内聚、松耦合"的设计目标,使系统更易于扩展和维护。
2025-10-21 22:06:54
414
原创 经典问题——接雨水
本文介绍了解决接雨水问题的双指针算法。该问题本质是相向双指针问题,基于木桶原理:接水量由较矮边决定。通过维护两个变量pre_max和suf_max分别记录左右墙的最大高度,比较两者后决定移动指针方向,并计算当前可接雨水。代码展示了简洁高效的C++实现,时间复杂度为O(n),空间复杂度为O(1)。该解法可参考LeetCode第42题。
2025-06-23 22:17:53
179
原创 nSum问题
本文介绍了一种解决n数之和(nSum)问题的递归分治方法。核心思想是将n数之和分解为两数之和的基础问题,通过递归降低问题规模。文章提供了C++实现模板,包含排序预处理、双指针法解决两数之和(base case),以及递归处理n>2情况。该方法通过将问题分解为(n-1)Sum并组合结果,最终得到n数之和的所有解。同时处理了重复元素问题,确保结果唯一性。
2025-06-23 22:17:03
239
原创 C++vector<vector<bool>>实现细节
C++中std::vector<std::vector<bool>>存在特殊实现细节,它使用位压缩优化存储而非直接存储布尔值,每个元素实际是代理对象而非真正的bool引用。与std::vector<std::vector<char>>相比:内存更节省(1bit/元素 vs 1byte/元素)操作更复杂(需要位运算)无法获取元素地址调试更困难 建议在非极端内存需求场景下使用vector<vector<char>>替代,以获得更好的可维护性和性能。示例代码展示了两种实现的类型差异和实际使用效果。
2025-06-23 22:13:43
639
原创 数据结构之线段树
一种基于分治思想的二叉树,用于在区间上进行信息统计。它的每一个节点都对应一个区间 [left,right] ,left、right 通常是整数。每一个叶子节点表示了一个单位区间(长度为 1),叶子节点对应区间上 left==right。每一个非叶子节点 [left,right] 的左子节点表示的区间都为 [left,(left+right)/2],右子节点表示的的区间都为 [(left+right)/2+1,right]。线段树是一棵平衡二叉树,树上的每个节点维护一个区间。
2025-01-04 23:12:17
1102
原创 C++学习路线及推荐书籍
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、C/C++学习路线二、推荐书籍1.C/C++书籍2.编程四大件(数据结构、网络、操作系统、设计模式)推荐书籍3.linux/Unix推荐书籍总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、C/C++学习路线C -> C++ -&g.
2022-04-22 11:49:50
3970
1
C语言实现扑克牌游戏
2020-10-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅