自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode 剑指 Offer 35. 复杂链表的复制 138. 复制带随机指针的链表

难度:中等。奇奇怪怪的题,主要是完成链表的深拷贝。由于不是寻常链表,有一个random指针,因此不能直接顺序去建立,这样random指向的node可能被重复拷贝。两个方法都是看题解的,非常的妙。使用map辅助/*// Definition for a Node.class Node {public: int val; Node* next; Node* random; Node(int _val) { val = _val;

2021-03-31 13:04:38 122

原创 LeetCode 90. 子集 II

难度:中等。标签:数组,回溯算法。这个题让我有点懵,感觉以前做过,但是竟然做不出来了。思路看代码吧。回溯正确解法:class Solution { vector<vector<int>> result; void dfs(vector<int>& nums, vector<int>& now, int k, int pre_choosed){ if(k >= nums.size()){

2021-03-31 11:20:26 56

原创 LeetCode 剑指 Offer 31. 栈的压入、弹出序列

难度:中等。使用一个栈来模拟。正确解法:class Solution {public: bool validateStackSequences(vector<int>& pushed, vector<int>& popped) { int n = pushed.size(); if(n != popped.size())return false; else if(n == 0)return true;

2021-03-31 10:19:49 93

原创 LeetCode 剑指 Offer26 27 28 33 54 55 二叉树相关

目录剑指 Offer 26. 树的子结构剑指 Offer 27. 二叉树的镜像剑指 Offer 28. 对称的二叉树剑指 Offer 33. 二叉搜索树的后序遍历序列剑指 Offer 54. 二叉搜索树的第k大节点剑指 Offer 26. 树的子结构这个题写的稍微久了一点,把程序分为两个部分,isSubStructureisSubStructureisSubStructure部分用来遍历A的所有节点,相同部分是从A的哪个节点开始的。isSubTreeisSubTreeisSubTree部分判断A树的部分

2021-03-30 18:39:15 55

原创 LeetCode 剑指 Offer 20. 表示数值的字符串

难度:中等。标签:数学。这个题的测试用例真的很恶心,跟之前【65. 有效数字】是一样的,但是这个题的测试用例里有空格,吐了。因为这个空格错了4次。以下是空格测试用例:// true"2 "" 1"// false"2 343"正确解法:class Solution { bool isNumber(char c){ if(c >= '0' && c <= '9')return true; return fal

2021-03-30 11:27:33 51

原创 LeetCode 剑指 Offer18 22 24 25 52链表相关

目录剑指 Offer 18. 删除链表的节点剑指 Offer 22. 链表中倒数第k个节点剑指 Offer 24. 反转链表剑指 Offer 25. 合并两个排序的链表剑指 Offer 52. 两个链表的第一个公共节点剑指 Offer 18. 删除链表的节点正确解法:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(i

2021-03-29 15:13:34 47

原创 LeetCode 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

难度:简单。按照快排的思想,从前往后找第一个偶数的索引为iii,从后往前找第一个奇数的索引为jjj,将两个数交换。若i>=ji >= ji>=j,说明序列以满足要求。正确解法:class Solution {public: vector<int> exchange(vector<int>& nums) { int n = nums.size(); if(n == 0)return nums;

2021-03-29 12:57:16 65

原创 LeetCode 剑指 Offer 14- I. 14- II. 剪绳子 | & ||

目录剑指 Offer 14- I. 剪绳子剑指 Offer 14- II. 剪绳子 II剑指 Offer 14- I. 剪绳子用动态规划做,这个题有个要注意的地方,就是必须要剪至少一次,因此当n==2n == 2n==2时,结果是1;当n==3n == 3n==3时,结果是2。因为这个错了一次。在前方直接返回这两种情况的值即可。正确解法:class Solution {public: int cuttingRope(int n) { if(n == 2)return 1;

2021-03-29 10:09:29 84

原创 LeetCode 190. 颠倒二进制位

难度:简单。二进制转换问题,使用位运算符进行转换。正确解法:class Solution {public: uint32_t reverseBits(uint32_t n) { uint32_t res = 0; for(int i = 0; i < 32; ++i){ if(n &(1 << i)){ res += pow(2, 31 - i); }

2021-03-29 09:10:06 40

原创 LeetCode 剑指 Offer 13. 机器人的运动范围

难度:中等。开始理解错了!没想到机器人是沿着格子走的,有的格子虽然位数和小于k,但是不能从[0,0]到达,因为中间被隔断了。刚开始写的代码是计算了矩阵中,所有位数和小于k的格子数。错误代码:class Solution {public: int movingCount(int m, int n, int k) { int res = 0; int u = (m - 1) % 10 + 10; vector<int> arr(u,

2021-03-28 10:46:55 70

原创 LeetCode 剑指 Offer 12. 矩阵中的路径

难度:中等。标签:深度优先搜索。一样的题再刷一遍。注意21行将path恢复。开始没写,以下用例错误,加上就好了。[["C","A","A"],["A","A","A"],["B","C","D"]]"AAB"上次的题解。代码思路与上次不一样,性能比上次好,有进步~正确解法:class Solution { bool dfs(vector<vector<char>>& board, string word, int i, int j, int k,

2021-03-28 09:36:54 51

原创 LeetCode 剑指 Offer 11. 旋转数组的最小数字

难度:简单。标签:二分查找。这个题看起来很简单,但是写起代码就发现我的思路漏洞百出。一些测试用例:[3,1][1,3,5][5,3,1][5,1,3][2,2,2,2,2,2][2,2,2,0,2,2]二分查找时将mid的值与right的值进行比较:mid值小于right值,则 right=midright=midright=mid(注意不是right=mid−1right=mid - 1right=mid−1)mid值大于right值,则 left=mid+1left=mid

2021-03-28 09:06:37 86

原创 Games101 计算机图形学课程笔记: Lecture 12 Geometry 3

目录细分 Mesh Subdivision (upsampling)Loop SubdivisionCatmull-Clark Subdivision网格简化 Mesh Simplification (downsampling)边坍缩网格正则化 Mesh Regularization (same #triangles)Shadow Map实现Mesh Operations: Geometry Processing细分 Mesh Subdivision (upsampling)Loop Subdiv

2021-03-27 20:19:37 508

原创 Games101 计算机图形学课程笔记: Lecture 11 Geometry 2 (Curves and Surfaces)

目录显示表示表示方法点云Polygon Mesh曲线贝塞尔曲线 Bézier Curves绘制贝塞尔曲线代数表示贝塞尔曲线属性分段贝塞尔曲线 Piecewise Bézier Curves分段贝塞尔曲线的连续性样条曲线 Spline曲面贝塞尔曲面显示表示表示方法点云密集的点能形成一个面。特点:能够十分简单的表示任何几何形体=对于大量数据的点集合很有用=通常被转换为多边形的面=在采样不足的区域很难绘制出图形Polygon Mesh应用最广泛的一种方式。特点:存储顶点和面的信

2021-03-27 19:40:46 244

原创 LeetCode 剑指 Offer 04. 二维数组中的查找

难度:中等。标签:双指针,数组。这个题的思路很有意思。从数组的右上角开始找如果当前值等于target,返回true如果当前值大于target,左移一列如果当前值小于target,下移一行正确解法:class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { int n = matrix.size();

2021-03-27 18:27:35 61

原创 OpenGL 渲染管线

顶点数据:顶点数据是一系列顶点的集合。一个顶点(Vertex)是一个3D坐标的数据的集合。而顶点数据是用顶点属性(Vertex Attribute)表示的,它可以包含任何我们想用的数据,比如顶点的坐标,颜色,法线,纹理坐标等。顶点着色器:把一个单独的顶点及其属性作为输入,主要功能是进行坐标变换。将输入的局部坐标变换到世界坐标、观察坐标和裁剪坐标。虽然也可在顶点着色器进行光照计算(称作高洛德着色),然后经过光栅化插值得到各个片段的颜色,但由于这种方法得到的光照比较不自然,所以一般在片段着色器进行光照计...

2021-03-27 11:48:17 207

原创 Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

目录Applications of TexturesEnvironment Map凹凸贴图位移贴图三维纹理几何隐式表示Algebraic SurfacesConstructive Solid GeometryDistance Functions 距离函数Level Set Methods 水平集Fractals 分形显示表示两种表示特定总结Applications of Textures纹理就是存储在GPU上的一块内存数据,可以对这块数据做区域查询。Environment Map一个光滑的表面会反

2021-03-26 13:24:59 549

原创 Games101 计算机图形学课程笔记: Lecture 09 Shading 3 (Texture Mapping cont.)

目录重心坐标重心坐标的计算重心坐标插值Simple Texture Mapping: Diffuse Color纹理过小Nearest Interpolation 最近邻插值Bilinear Interpolation 双线性插值Bicubic Interpolation 双三次插值纹理过大Mipmap重心坐标三角形内部进行插值使用重心坐标来完成。重心坐标的计算三角形内的任意点可以由三角形的三顶点加权平均表示,且权重和为1。这个权重就是三角形内顶点的重心坐标。比如,A的重心坐标为(1,0,0)

2021-03-26 11:30:24 248

原创 LeetCode 105. 从前序与中序遍历序列构造二叉树

难度:中等。标签:树,深度优先搜索,数组。正确解法:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nu

2021-03-26 10:37:28 43

原创 Games101 计算机图形学课程笔记: Lecture 08 Shading 2 (Shading, Pipeline and Texture Mapping)

目录Specular Term (Blinn-Phong)Specular Term 高光项Ambient Term 环境项Blinn-Phong Reflection模型效果着色频率flat shading 平面着色Gouraud shading 高洛德着色Phong shading着色方法对比计算问题顶点法线重心插值Graphics (Real-time Rendering) PipelinTexture Mapping 纹理映射Specular Term (Blinn-Phong)Specular

2021-03-25 22:54:22 543

转载 Games101 计算机图形学课程笔记: Lecture 07 Shading 1 (Illumination, Shading and Graphics Pipeline)

目录可见性/遮挡画家算法Z-BufferShading 着色shading定义Blinn-Phong Reflectance Model局部点着色漫反射Lamber's cosine law光衰减Lambertian (Diffuse) Shading可见性/遮挡画家算法真实世界中的物体之间相对于相机是有远近关系的,画家算法可以在2D平面上反应物体的先后关系,即先画远处物体,再画近处的。需要对物体进行排序,复杂度为O(nlogn),而且以下情况不好判断。Z-BufferZ-Buffer不对物

2021-03-25 22:12:31 354

原创 Games101 计算机图形学课程笔记: Lecture 06 Rasterization 2 (Antialiasing and Z-Buffering)

目录走样 aliasingSampling Artifacts频域解释傅里叶变换走样滤波卷积反走样通过超采样来反走样 (MSAA)走样 aliasing上节的光栅化后会出现走样的结果,图像会出现锯齿,明显失真。Sampling Artifacts在图形学中,artifacts指的是Errors / Mistakes / Inaccuracies,指一些不准确或者与预期不一样的结果。SA有以下几种:Jaggies (Staircase PatternMoiré Patterns in I

2021-03-25 21:29:48 525

原创 Games101 计算机图形学课程笔记: Lecture 05 Rasterization 1 (Triangles)

目录Perspective ProjectionCanonical Cube to Screen屏幕空间将立方体变换到屏幕空间光栅化判断像素点与三角形关系加速光栅化Perspective Projection下图灰色平面为近平面,由(l,r,b,t)(l,r,b,t)(l,r,b,t)表示,平面对称,中心点位于Z轴上。Aspect ratio = width / height近平面的宽高比,如屏幕的4:3,16:9等vertical field-of-view(for Y):垂直可视角度。下图两

2021-03-25 20:54:42 213

原创 Games101 计算机图形学课程笔记:Lecture 04 Transformation Cont.

目录3D Transformations罗德里格(Rodrigues)旋转公式Viewing transformation视图变换投影变换Orthographic Projection 正交投影Perspective Projection 透视投影3D Transformations总旋转表示如下欧拉角是物体绕坐标系三个坐标轴(x,y,z)的旋转角度。通常用于飞机的旋转,将旋转分为roll,pitch,yaw三个部分。当某个轴旋转后与另一个轴重合时,就会出现万向节死锁现象,常见的解决方法是规

2021-03-25 18:57:27 349

原创 Games101 计算机图形学课程笔记:Lecture 03 Transformation

目录2D Transformation缩放镜像剪切旋转齐次坐标引入原因齐次坐标仿射变换逆变换变换组合3D 变换2D Transformation通过特定点就可以计算出变换矩阵。缩放原坐标为[x,y]T[x,y]^T[x,y]T,则做如下缩放变变换后可得到x′=sxx'=sxx′=sx,y′=syy'=syy′=sy。写为矩阵形式通过改变s的取值,可以达到不同效果,也可实现两个轴不同缩放比例的效果。镜像剪切类似于四边形不稳定的性质,将任意一边拉长,方形变平行四边形。旋转分别使用

2021-03-25 17:25:55 324

原创 LeetCode 907. 子数组的最小值之和

难度:中等。标签:栈,数组。思路很好想,就是超时。正向思维找出所有的子数组,找出所有子数组中的最小值,求他们的总和。首先动态规划,超时了。超时代码:class Solution {public: int sumSubarrayMins(vector<int>& arr) { int n = arr.size(); int base = pow(10, 9) + 7; vector<vector<int&g

2021-03-25 16:16:23 254

原创 OpenGL 图形学基础知识汇总

模板测试和alpha test的顺序延迟渲染的过程,GBuffer,相比前向渲染的优势和劣势延迟渲染和前向渲染的区别,时间复杂度的比较速度过快/体积过小导致物理引擎检测不到碰撞,如何解决解释纹理采样的两个模式两个单位矢量叉乘和点乘的几何意义介绍光栅化光栅化过程中常用的算法比较常见的全局光照实时阴影图片混合如何实现顶点坐标包括哪些数据(位置,像素颜色,索引)光照在哪里实现透明物体要注意什么,渲染顺序八叉树-图形学布林冯模型N·L(cosθ)的物理意义(朗伯余弦定律)半球积分的

2021-03-24 16:17:57 1011

原创 LeetCode 341. 扁平化嵌套列表迭代器

难度:中等。标签:栈,设计。我用递归做的。正确解法:/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * class NestedInteger { * public: * // Return true if this NestedInteger

2021-03-23 21:10:08 40

原创 算法数据结构汇总

https://www.cnblogs.com/LUO77/p/5771237.htmlC++ STL总结Dictionary 的插入时间复杂度?平衡二叉树的插入时间复杂度

2021-03-23 18:25:49 658

原创 C++基础知识

目录1. 面向对象类虚函数2. 类型和变量C++强制类型转换const 和 static变量指针和引用其他3. 内存、编译、运行内存分配和计算编译运行4. 函数1. 面向对象面向对象的基本概念:类、对象、继承。基本特征:封装、继承、多态。封装:将低层次的元素组合起来形成新的、更高实体的技术;继承:广义的继承有三种实现形式:实现继承、可视继承、接口继承。多态:允许将子类类型的指针赋值给父类类型的指针类类的默认成员函数:默认构造函数、析构函数、复制构造函数、赋值函数。static静态成员

2021-03-22 22:16:17 567

原创 LeetCode 5696. 统计异或值在范围内的数对有多少

难度:困难。标签:字典树。使用字典树将数组中二进制字符串存储起来,每个节点都要存放该子树存储的数字个数。使用search(a,right)search(a, right)search(a,right)查找与a异或小于right的数的个数。正确解法:class TrieNode{public: int num; TrieNode* children[2] = {NULL}; TrieNode(){ num = 0; }};class Trie{

2021-03-22 17:16:33 143

原创 LeetCode 1553. 吃掉 N 个橘子的最少天数

难度:困难。标签:动态规划。由题知1 <= n <= 2*10^9,因此使用自底向上的动态规划方法肯定会超时。因此该题采用由上而下的深度优先搜索,但是使用map存储历史值,然后进行遍历还是超时了。需要想到方法进行剪枝。超时代码:class Solution { map<int, int> data; int result = INT_MAX; void dfs(int k, int len, int m){ if(len >

2021-03-22 15:26:33 187

原创 LeetCode 随机刷题3

1643. 第 K 条最小指令只会用暴力的,没有刷,看了题解,需要用到组合数。以后可以重复刷。这里记录一下组合数的求法,comb[n][m]comb[n][m]comb[n][m]为从n个数中选取m个的组合方式(n > m)。 vector<vector<int>> comb(n + 1, vector<int>(m + 1)); comb[0][0] = 0; for(int i = 0; i <= n; i++){ cor(int j

2021-03-20 20:13:11 108

原创 LeetCode 面试题 16.07. 最大数值

难度:简单。想到了位运算,但是一看就是我不会的题,位运算这块每太接触过。直接看题解:首先使用减法,a−ba - ba−b为负数则a<ba<ba<b, 反之a>ba>ba>b由于减法int可能会溢出,因此采用long进行减法long是8字节,64位,所以将a−ba-ba−b右移63位得到符号位,即(a−b)>>63(a - b) >> 63(a−b)>>63,正数符号位为0,负数为-1由此得到了符号,使$k = 1 + (a

2021-03-20 16:11:21 86

原创 LeetCode 150. 逆波兰表达式求值

难度:中等。标签:栈。正确解法:class Solution { int string2Int(string s){ int n = s.length(); int sign = 1, i = 0; if(s[0] == '+')i++; if(s[0] == '-'){ sign = -1; i++; } int a = 0; f

2021-03-20 09:54:14 42

原创 LeetCode 随机刷题2

目录1575. 统计所有可行路径面试题 17.13. 恢复空格面试题 08.08. 有重复字符串的排列组合1363. 形成三的最大倍数1575. 统计所有可行路径难度:困难。标签:动态规划。这个题我写了三个小时,然后超时了。哭了。思路是这样的:首先,肯定是动态规划,开始想到使用dp[i][j][k]dp[i][j][k]dp[i][j][k]表示从i到j花费燃料小于等于k的路径数,想了想试了试发现不行,若加上小于k的路径数,这样会重复计算很多路径,因此用dp[i][j][k]dp[i][j][k

2021-03-19 22:37:22 112

原创 LeetCode 93. 复原 IP 地址

难度:中等。标签:字符串,回溯算法。正确解法:class Solution { vector<string> result; vector<char> x; void dfs(string s, int idx, int seg_n){ if(seg_n > 4)return; if((seg_n == 4 && idx < s.size()) || (idx == s.size() &amp

2021-03-19 11:59:01 60

原创 LeetCode 91. 解码方法

难度:中等。标签:字符串,动态规划。正确解法:class Solution {public: int numDecodings(string s) { if(s[0] == '0')return 0; int n = s.length(); vector<int> dp(n + 1); dp[0] = 1; dp[1] = 1; for(int i = 2; i <= n; i+

2021-03-19 11:21:08 49

原创 LeetCode 面试题 17.07. 婴儿名字

难度:中等。标签:并查集,深度优先搜索,广度优先搜索。这个题思路不难想到,就是很复杂。需要注意的两个点:用例中的names可能出现重复的名字,比如下面的用例,出现了两个Jon,第二个Jon的值将第一个覆盖掉,即Jon人数为21.names = [“John(15)”,“Jon(12)”,“Chris(13)”,“Kris(4)”,“Jon(21)”,“Christopher(19)”]synonyms = ["(Jon,John)","(John,Johnny)","(Chris,Kris)"

2021-03-19 10:52:17 124

原创 LeetCode 1387. 将整数按权重排序

难度:中等。标签:排序,图。不知道怎么用图,但可以暴力做出来。正确解法:class Solution { int getWeight(int x){ if(x == 1)return 0; else if(x % 2)return getWeight(3 * x + 1) + 1; else return getWeight(x / 2) + 1; } static bool cmp(vector<int>&am

2021-03-18 22:57:20 92

空空如也

空空如也

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

TA关注的人

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