摘要:
LeetCode 240. Search a 2D Matrix II 一道经典的二维矩阵搜索题。 题目描述 Write an efficient algorithm that searches for a target value in an m x n integer matrix. The m 阅读全文
摘要:
LeetCode 44. 通配符匹配 一道简化版的正则表达式匹配题。 题目描述 Given an input string (s) and a pattern (p), implement wildcard pattern matching with support for '?' and '*' 阅读全文
摘要:
LeetCode 10. 正则表达式匹配 这道题是正则表达式的匹配,初始化和状态转移都比较繁琐,需要非常小心,测试样例也给的比较全一些。先做一道简化版的 LeetCode 44. 通配符匹配 会简单一些。 题目描述 Given an input string (s) and a pattern (p 阅读全文
摘要:
LeetCode 84. 柱状图中最大的矩形 题目描述 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。 图中阴影部分为所 阅读全文
摘要:
LeetCode 42. 接雨水 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2, 阅读全文
摘要:
shared_ptr shared_ptr 是通过引用计数的方式实现的,这里结合一个单线程的参考实现进行解释。注意,这种实现并不是线程安全的。STL 的 std::shared_ptr 也不是线程安全的,两个成员变量的修改并不是一次操作完成的,使用时需要加锁。 参考实现 namespace smar 阅读全文
摘要:
const:指针常量与常量指针 const与指针的结合方式有时候令人迷惑,如: int * a0; int * const a1; int const * a2; const int * a3; int const * const a4; const int * const a5; const in 阅读全文
摘要:
现代操作系统的内存分配以页为单位进行管理,而页通过段进行管理,组成了段页式内存管理。 本文对C++程序的各段进行简单的区分,并厘清各段在可执行程序与进程中的状态关系。 程序大体被划分为两部分,只读部分和读/写部分,这源于历史上ROM和RAM两类存储器的划分。尽管现代存储器的发展早就突破了这种分类方式 阅读全文
摘要:
二叉树遍历是一个很常用的基础算法,尤其常用于作为递归转非递归算法的模板。其中,前序遍历常用作无返回值的自顶向下的递归算法的改写,后序遍历常用作带返回值的自底向上的递归算法的改写,例如求树的高度的两种思路。 这里对二叉树的非递归遍历做一个总结,前序、中序、后序使用的都是同一套模板。与递归写法一样,非递 阅读全文
摘要:
Partition算法及其应用 本文记录partition算法的两种实现方案,及其经典应用场景 Partition算法 partition算法的作用是选定一个元素pivot,然后将元素划分为两个部分,小于pivot的放在左边,大于pivot的放在右边。 实现上,可以分为单向扫描和双向扫描两种方案。 阅读全文