Peinan Weng

永不放弃 直到做对为止

LeetCode - Two Pointers - N/A


LeetCode - Negative Mark in Array Model - N/A


LeetCode - Fast and Slow Pointers in Linkedlist

快慢指针的算法源于不用任何额外空间判定链表是否存在回环 LeetCode - 141 环形链表 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 要求:空间复杂度为O(1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 pub...

LeetCode - Bit Operation

n的幂系列 - 最优解法 LeetCode - 231 2的幂 判断给定的整数是否为2的幂次方 1 2 3 4 5 6 7 // 利用位运算快速求解 class Solution { public: bool isPowerOfTwo(int n) { return n>0&&(n&n-1)==0; ...

编译器为什么不把指针初始化为null

“前段时间想到一个问题,编译器会把int变量初始为0,而指针却不初始化为null,引起野指针的问题?” - False Google了一下,纠正了一些错误的认知。 其实这个说法是错的,int型变量不一定会初始化为0,指针变量也不是一定不初始化(C# / Java中的对象 = 指针,同理)。 正确的说法应该是,在静态存储区的变量会被初始化为0,而在堆和栈上的不会。 这么做是为了提高效率...

二叉树的遍历与搜索

二叉树的前序、中序、后序、层序遍历 前序中序后序属于深度优先 / 层序属于广度优先 结点定义 1 2 3 4 5 6 struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; 前序遍历 - 根节点 -&g...

Markdown语法整理

在Github Pages上我们需要采用Markdown来发表posts 一、字体 1 2 3 *italic* **bold** ~~delete~~ italic bold delete 二、标题 1 2 3 4 5 6 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 一级标题 二级标题 三级标题 ...

Vertex Transformation

顶点变换 (Vertex Transformation) 最近在学Shader编程中有关深度纹理(Depth Texture)的使用,里面涉及到比较多的空间转换和顶点变换,之前看的已经忘得差不多了,拿出来重新复习一下。 齐次坐标 (homogeneous coordinate) 表示一个点在某个空间的位置通常可以用三维坐标,如(x, y, z),但在空间转换中,通常用四维齐次坐标(简称...

Margin Highlight

最近几个月在慢慢学习Shader编程,只看书本上的代码不太记得住,打算找一些网上的例子动手实现一下加深印象。 这是一个边缘高亮的效果,原理非常简单,设x是视点到物体表面要渲染的某点的连线,y是该点的法线(需要在同一坐标系中),判断x与y的夹角(利用点乘符号判断),如果x与y垂直或接近垂直,就可以判定该点位于边界上。具体实现在Fragment Shader中进行。(Line 69-74) ...

ThreadPool - 线程池

使用ThreadPool线程池来实现异步功能 在Unity开发中,很多时候要用到Coroutine/协程来进行复杂的逻辑控制和异步逻辑的实现(如实时反馈的资源加载)。 但协程不是真正的多线程,仍然运行在主线程中。 ThreadPool是.NET自带的线程池静态类,用它可以真正地实现多线程,起到加速计算的作用,同时它的使用比较简单。 ThreadPool也可以简单地实现一个异步功能,以...