自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(294)
  • 资源 (3)
  • 收藏
  • 关注

原创 LeetCoder_____ 最长有效括号(32)

1. 思路A一般来说括号这种匹配的一般都是用栈来验证,但是这里如何统计最长有效的括号呢?下面给出一种方法:准备栈A和数组B,逐个读入字符串字符c,如果栈顶元素和当前字符c不可以匹配’(’ 和 ‘)’;那么就将当前字符压入栈,并且在数组B中追加一个0;如果可以匹配,那么就将栈顶元素弹出,并且将栈顶对应压入B数组的0改为2。最后统计B数组中连续不为0的数的和即可。拿"(())(()"举例子...

2019-10-19 10:06:00 201

原创 LeetCoder_____ 两数相除(29)

1. 思路以前在其他地方做过这个题目,不仅考察如何替代除法,而且还考察各种溢出的边界情况。首先说下如何代替除法:很简单容易想到的就是使用减法,但是减法效率太低。根据上面的思路我们可以想到利用左移右移来加快算法,核心思路如下:/*我们可以把一个dividend(被除数)先除以2^n,n最初为31,不断减小n去试探,当某个n满足dividend/2^n>=divisor时, 表...

2019-10-16 22:12:49 127

原创 LeetCoder_____ K 个一组翻转链表(25)

1. 思路相对前面那个链表两两翻转升级了一下, 不过我做链表题目喜欢用递归,但是递归函数调用时间开销、栈内存开销都相对循环比较大哈哈。整体思路不变,核心的翻转部分使用头插法来翻转链表。2. 代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *nex...

2019-10-14 13:47:13 111

原创 LeetCoder_____丑数 III(1201)

1. 思路相比原来的找第n个丑数升级了一些,n很大决定了不能够递推。不过这里有个规律就是随着n增大,0~n里面的丑数个数是递增序列(不下降序列)。所以我们可以将A[i] 表示为0 ~ i中丑数的个数,那么A数组就是一个递增数组;原题就是找A数组中第一个为n的元素下标(其实就是找第n个丑数)。在有序序列里面找一个元素,很容易想到二分。注意:如何算0~i中有多少个丑数呢?其实就是一个容斥定理...

2019-10-14 10:54:53 313

原创 LeetCoder_____周赛(158)

1.分割平衡字符串(5222)题目链接: 5222. 分割平衡字符串题目和括号匹配类似,扫描字符串,遇到L就+1,遇到R就-1,那么平衡字符串的时候一定为0。class Solution {public: int balancedStringSplit(string s) { int score = 0; int ret = 0; ...

2019-10-13 17:15:39 126

原创 LeetCoder_____两两交换链表中的节点(24)

1. 思路看题意,很简单,可以一个for循环两两交换,需要注意的是处理链表节点next的连接,但是这里也有简洁的方法,我们把相邻两个节点的交换看做是一次操作,那么我们只需要使用递归,那么将这一次操作递归下去就可以完成整个链表的操作了。2. 代码/** * Definition for singly-linked list. * struct ListNode { * int ...

2019-10-11 23:56:02 96

原创 LeetCoder_____合并K个链表(23)

1. 话外工作之后好久没有刷Leetcode,今天发现已经有中文官网了,好的地方是看题不需要Google翻译了。2. 思路看题意,很简单是个归并排序,不过真的是一直沉迷业务代码,好久没有写过算法,竟一时有点“卡住”,不过还好很快就能写出来。这个题目在时间算法度O(nlogk)的要求下,主要有两个实现思路:每次取K个链表头中最小的一个加入到新链表中,每次比较K,一共N次比较。复杂度是O...

2019-10-09 23:32:34 137 1

原创 【Lua 5.3源码】Lua 新旧String 对比

一.在Lua5.1.4版本中TString的实现如下:typedef union TString { L_Umaxalign dummy; /* ensures maximum alignment for strings */ struct { CommonHeader; lu_byte reserved; unsigned int hash; size...

2019-07-07 22:03:09 1237

原创 【Lua 5.3源码】table实现分析

1.table的特性在Lua中table是个非常重要的类型,通过使用table的一些特性可以实现许多数据结构,例如map,array queue,stack等。通过使用者角度来讲,table既可以当作array使用也可以当作map使用,那么对于设计者来讲,那么需要保证table的高效率的查找、插入、遍历。当然,table的设计者还提出了metatable(元表)的概念,以供使用者可以用来实...

2019-07-01 01:23:46 4685 5

原创 Unity UGUI 字体加粗特效

Unity UGUI 字体加粗特效1.前言2.优化(一)3.优化(二)1.前言在项目组无可厚非会在一些描述的文本中加入粗体,比如标题或者是重要文字,然而Unity本身UGUI提供的Text的Bold属性在某些字体达到的效果并不尽人意,可以先看下原本Unity的效果:2.优化(一)原本的效果肯定是不满足美术需求的,我们需要通过字体渲染方面重新实现字体加粗效果,在本文中核心算法其实就是将文本...

2019-03-26 17:37:21 8550 1

原创 【SoftwareRender三部曲】三.流水线

一.前言已经是三部曲中最后一个章节,这个章节结束之后将会完成这个SoftwareRender。而这章也是内容最多,最不容易理解的章节。 二.缓冲区在写流水线之前我们要先实现缓冲区,因为流水线上的读写操作都是在缓冲区中实现的,一般来说缓冲区有颜色缓冲区、深度缓冲区、模板缓冲区。在这里为了简单,我们只实现模板缓冲区和深度缓冲区。对于缓冲区而言,我们就简单的提供三个接口:初始化、读、写。class De

2017-12-30 15:04:23 994 7

原创 【SoftwareRender三部曲】二.着色器(shader)

一.前言在传统的固定渲染管线中,渲染中的一系列操作如:坐标转换、光照、投影、剪裁、扫描转换、纹理贴图、可见性测试、帧缓冲像一个流水线一样按部就班的按序执行。每一道工序上都有一些不同的参数,开发者为了完成不一样的效果就是去改变每个工序的参数。然而人们总是不满足于这样有限的控制;于是就出现了后面的可编程渲染管线,将渲染中的一些工序交给shader来完成。你可以把shader看作是一段小程序,只不过是用作

2017-12-27 21:12:35 637

原创 【SoftwareRender三部曲】一.网格

一.简介在这个系列讲述绘制图元主要是以三角形为主,我们通过顶点构成三角形,三角形构成整个模型的网格。如下:每个顶点可以携带一些信息,比如位置、法向量、颜色、UV坐标等等。后面我会在Shader着色器篇章讲述这些信息的用处。 如何用顶点来组织一个网格呢?这里我们是使用的索引顶点。也就是顶点数据只存一份,网格的图元顶点仅仅使用顶点的索引来表示。这里有篇Ogl中网格顶点组织结构的介绍。二.顶点结构根据上

2017-12-27 00:33:39 1219

原创 【SoftwareRender三部曲】前言

一.介绍这个系列主要是介绍如何简单制作一个SoftwardRender,后面会分三篇文章来完成这个系列。在看这个系列之前最好先阅读之前【游戏开发3D数学笔记】;在这个工程中的所需要的一些数学库(Vector、Matrix、Mesh等)都来源于之前3D数学系列。当然,这些数学库使用上比较简单,如果你对其数学原理不是很感兴趣的话,也可以跳过,并不会对这个系列的阅读有什么影响。 二.代码这个系列最后的工

2017-12-24 23:50:54 733

原创 【游戏开发3D数学笔记】6.坐标系切换和纹理

一.物体坐标系到世界坐标系(Model Matrix)        在之前固定流水线,需要将模型的顶点坐标从自身坐标系依次进行缩放,旋转,平移操作(这个顺序不能改变)。而在可编程管线中,这些操作放到了vertex shader中,我们需要得到模型中的每个顶点的世界坐标,从而进行一些深度测试、光照等运算。         而model matrix的推导也十分简单,只需要按照顺序将三种变换的矩阵连

2017-12-08 20:41:35 604

原创 C++ Vector属性Swizzle实现

一.前言在写gl shader的时候, 我发现glsl的语法中vec可以支持如同如下的语法任意混合属性vec3 pos;pos.xyzpos.yxzpos.xxxpos.zx...我们可以很容易的在C++写一个2、3个属性的vec类,但是如何使得vec也支持如上语法将属性进行混合呢?二.方案一我们或许可以想到,利用uion+struct来实现struct vec3{

2017-12-06 17:36:14 1632

原创 【游戏开发3D数学笔记】5.方位与角位移

一.思维导图        没有太多时间码字,后面可能使用思维导图的方式梳理章节重点。 点击查看大图 二.Quaternion类        根据书上第10,11章的内容,整理了一个Quaternion类,其接口和实现主要是参照Unity的Quaternion类来仿写的。         代码地址

2017-11-19 19:20:33 475

原创 【游戏开发3D数学笔记】4.矩阵和线性变换

一.不同变换的矩阵推导旋转        在前文知道旋转矩阵的行向量就是旋转后的坐标系的基向量。2D中绕原点的旋转只有一个参数,角度θ,它描述了旋转量。逆时针旋转经常(不是必须)被认为是正方向,顺时针方向是负方向。如下图,我们很容易得到旋转后的基向量,从而得到旋转矩阵:2D旋转矩阵R(θ)=[p′q′]=[cosθ−sinθsinθcosθ]R(\theta) = \begin{bmatrix}

2017-11-07 11:06:33 1096 1

原创 【游戏开发3D数学笔记】3.向量和矩阵

一.前言        这篇笔记没有太多东西,书中这两章多是关于向量、矩阵的一些概念和运算介绍。网上已经有很多优秀的博客讲解,这里不累赘介绍。主要是根据书中的讲解,写一个向量、矩阵的运算类以供后面使用。 二.向量        相关概念学习地址:3D数学基础—向量         需要掌握的是:                                 1.向量的加、减运算

2017-11-04 17:21:40 650

原创 【游戏开发3D数学笔记】2.坐标系

一.坐标系简介        为了描述二维,三维空间中位置,方向等,数学家提出了坐标系这一概念。并且在不同的场景下使用的坐标系也可能不一样,比如:地理位置——经纬度,二次曲线分析——极坐标,而在此书中描述3D空间物体坐标使用的是笛卡尔坐标系。至于笛卡尔坐标系的详细介绍可以查看[笛卡尔坐标系Wiki]。二.坐标系的方向        2D笛卡尔坐标系:水平的轴称作X轴,向右为X轴的正方向,垂直的轴

2017-10-31 11:09:09 923

原创 【游戏开发3D数学笔记】1.有话说在前面

一.前言        这个分类的文章主要是我学习《3D数学基础:图形与游戏开发》这本书所做的一些笔记,笔记之中难免会使用书上的原句。然后我也会将查阅的一些相关资料融在一起。所以在使用原句的时候我尽量使用紫色标注:         [该颜色内容为书中的的原句]         对于我自己觉得需要注意的地方,我会使用红色标注:         [该颜色内容为需要注意的地方]二.还是前言

2017-10-29 22:07:17 688

原创 天道酬勤,记春招之路(完美世界,360,腾讯IEG,网易雷火)

一.前言先说说自己的一些情况吧,本人来自双非一本理工科学校,软件工程大三学生。大学期间参加过ACM竞赛,也进过实验室做过项目。主要学习的语言是C++,但是项目开发却是用的Unity+C#进行项目开发。除了实验室的项目,自己也会抽闲暇时间自己做一些游戏Demo。目前想从事的岗位是游戏客户端开发工作。所以投递的岗位都是游戏开发。二.春招之旅完美世界 过程:    完美世界应该是我最早投递的公司,因为实验

2017-04-28 22:22:48 8028 18

原创 2017第八届蓝桥杯C/C++ B组省赛题解

2017年第八届蓝桥杯C/C++ B组省赛题解

2017-04-08 19:47:21 110159 168

原创 剑指Offer(24)______二叉树中和为某一值的路径

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。class Solution {public: vector > ans; int arr[10000]; void solve(TreeNode* root,int index,int sum,int expectNum

2017-03-24 08:44:48 740

原创 剑指Offer(23)______二叉搜索树的后序遍历序列

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。class Solution {public: bool check(vector& s,int l,int r){ if(r - l <= 2) return true; int index =

2017-03-24 08:42:55 390

原创 剑指Offer(22)______从上往下打印二叉树

从上往下打印出二叉树的每个节点,同层节点从左至右打印。class Solution {public: vector PrintFromTopToBottom(TreeNode* root) { vector ans; vector tree; if(root == NULL) return ans; //

2017-03-24 08:40:07 454

原创 剑指Offer(21)______栈的压入、弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)class Solution {public: bool IsPopOrder(

2017-03-24 08:37:38 431

原创 剑指Offer(20)______包含min的栈

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。class Solution {public: stack stk; stack m; void push(int value) { if(m.size()==0){ m.push(value); }else{

2017-03-24 08:36:01 547

原创 剑指Offer(19)______顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.class Solution {public: vector printMatrix(vector >

2017-03-24 08:34:48 377

原创 剑指Offer(18)______二叉树的镜像

操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5

2017-03-24 08:33:12 406

原创 剑指Offer(17)______树的子结构

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)class Solution {public: bool isSubtree(TreeNode* pRoot1, TreeNode* pRoot2){ if(pRoot2 == NULL) return true; if(p

2017-03-24 08:31:13 385

原创 剑指Offer(16)______合并两个排序的链表

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。class Solution {public: ListNode* Merge(ListNode* l1, ListNode* l2) { if(l1 == NULL)return l2; //鲁棒性:链表不能为空 if(l2 == N

2017-03-24 08:29:50 345

原创 剑指Offer(15)______反转链表

输入一个链表,反转链表后,输出链表的所有元素。class Solution {public: pair reverseList(ListNode* pHead){ if(pHead->next == NULL)return {pHead,pHead}; auto tp = reverseList(pHead->next); tp

2017-03-24 08:26:57 360

原创 剑指Offer(14)______链表中倒数第k个结点

输入一个链表,输出该链表中倒数第k个结点。class Solution {public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(pListHead == NULL) return NULL; //鲁棒性:判链表不为空 if(

2017-03-24 08:22:39 417

原创 剑指Offer(13)______调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。class Solution {public: void reOrderArray(vector &array) { if(array.size() == 0) return;

2017-03-24 08:21:30 332

原创 剑指Offer(12)______数值的整数次方

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。class Solution {public: bool equal(double a,double b){ if(fabs(a-b) < 0.00001) return true; return false; }

2017-03-24 08:10:23 352

原创 剑指Offer(11)______二进制中1的个数

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。class Solution {public: int NumberOf1(int n) { int cnt = 0; while(n){ cnt ++; n = n&(n-1); }

2017-03-24 08:09:37 341

原创 剑指Offer(10)______矩形覆盖

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?class Solution {public: int rectCover(int number) { if(number <= 0) return 0; //鲁棒性:判断number是否合法

2017-03-24 08:08:42 360

原创 剑指Offer(8)______跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。class Solution {public: int jumpFloor(int number) { if(number <= 0) return 0; //鲁棒性:判断number是否合法 int dp[4

2017-03-24 08:06:29 305

原创 剑指Offer(9)______变态跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。class Solution {public: int jumpFloorII(int number) { int dp[40] = {1,1,2}; int sum[40] = {1,1,4};

2017-03-24 08:06:26 324

Unity3D火焰粒子特效

使用Unity3D自带的粒子系统制作的火焰粒子特效。。。。

2018-05-18

LitJson.dll

LitJson库,用于json的序列化和反序列化

2016-09-15

基于Opencv植物大战僵尸游戏源码

基于opencv\C++语言实现的植物大战僵尸游戏部分源码.

2015-08-09

空空如也

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

TA关注的人

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