02 2021 档案
摘要: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的放在右边。 实现上,可以分为单向扫描和双向扫描两种方案。
阅读全文
摘要:LeetCode 405. Convert a Number to Hexadecimal 简单题,只为记录一下整数转十六进制的几种写法。 题目描述 Given an integer, write an algorithm to convert it to hexadecimal. For nega
阅读全文

浙公网安备 33010602011771号