自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

菜鸡工坊

一枚菜鸡的进化历程

  • 博客(217)
  • 收藏
  • 关注

原创 幸运N串

小A很喜欢字母N,他认为连续的N串是他的幸运串。有一天小A看到了一个全部由大写字母组成的字符串,他被允许改变最多2个大写字母(也允许不改变或者只改变1个大写字母),使得字符串中所包含的最长的连续的N串的长度最长。你能帮助他吗?输入描述:输入的第一行是一个正整数T(0 < T <= 20),表示有T组测试数据。对于每一个测试数据包含一行大写字符串S(0 < |S| <= 50000,|S|表示字符串长度)。数据范围:20%的数据中,字符串长度不超过100;70%的数据中,字符

2020-08-09 21:14:44 451

原创 输出所有子串

#include<bits/stdc++.h>using namespace std;int main(){ string s; cin >> s; for (int i = 0; i < s.size(); i++) { for (int j = 1; j <= (s.substr(i)).size(); j++) { cout << s.substr(i, j) << endl; } }}

2020-08-09 14:59:07 745

原创 2020-08-07

#include <bits/stdc++.h>using namespace std;struct cmp1{ bool operator ()(int& a, int& b) { return a > b; }};int main(){ int K = 0; cin >> K; priority_queue<int, vector<int>, cmp1> minHeap; vector<int

2020-08-07 17:47:39 234

原创 Blend One Zero/Zero One

最近看Shader的时候会注意到一句话:这里是Blend Zero One,而有的Shader是One Zero。这里记录一下他俩的区别首先是旁边TA巨佬给我的Paper中写道:还有国外巨佬Bgolus的解释:这里其实已经解释的很清楚了,我在这里简单翻译一下:Csrc是当前正在Rasterizing的某个Pixel输出的Color,相当于Shader OutputCdst是当前位于Fream Buffer中的颜色。如果不进行Blend的话,当Csrc通过Ztest&Stencil

2020-07-23 11:30:56 1938 1

原创 打印函数调用堆栈

入职腾讯以来,天天都很忙。今天难得清闲,借此机会记录一下前段时间搞的一个小功能,打印函数的调用堆栈。什么是函数的调用堆栈?给你看一段代码你马上就明白了。比如我在DecideAllTaskID中调用A,那么打log之后我们就可以看到LogBacktrace的堆栈回溯结果了。以上就是堆栈回溯的结果了,前面两个null可能是符号表中没有找到符号。那我就直接堆栈回溯的代码了...

2020-07-15 10:54:33 1150

原创 9. 回文数

这个题很经典,判断数字是否是回文数。力扣上是简单级别的。但题目要求不许转成string。仔细想想发现这题还真不简单。转成字符串的解法就不贴了,这里主要记录一下不转成字符串的解法。bool isPalindrome(int x){ if (x == 0)return 1; if (x < 0)return 0; long r = 0, t = x; while (t) { r = r * 10 + t % 10; t /= 10; } return x == r;}.

2020-06-10 20:47:01 121

原创 单调栈问题

什么是单调栈?从名字上就听的出来,单调栈中存放的数据应该是有序的,所以单调栈也分为单调递增栈和单调递减栈单调递增栈:栈中数据出栈的序列为单调递增序列单调递减栈:栈中数据出栈的序列为单调递减序列ps:这里一定要注意所说的递增递减指的是出栈的顺序,而不是在栈中数据的顺序单调栈板子题:2020年腾讯校招笔试真题 第二题这题就是一个很明显的单调栈问题,直接上板子,5分钟解决。#include<bits/stdc++.h>using namespace std;int main(v

2020-06-07 14:05:30 188

原创 【二】开发一个类似于unity profile的数据可视化面板

接上篇博客前一篇有一个局限性:数据是死的,也就是说必须先获取到数据,再生成图表。可unity proflier基本上是实时获取数据并呈现的,那么之前的方案就行不通了。先上效果图这里是实时获取monoUsed数原理就是先生成N个为0的数据,然后每点击一次button添加一个新的数据,删除一个末尾的数据,这样就可以动态的显示了。代码和上一篇大同小异,无非多了一个增加数据和删除数据的方法。代码:using System.Collections.Generic;using System.Linq;

2020-06-02 18:01:24 418 2

原创 【一】开发一个类似于unity profile的数据可视化面板

内容非原创 是参考一个大佬的源码改的。大佬地址:https://blog.51cto.com/13638120/2103991先上效果图:这里数据是完全随机的,当然如果有需要可以捕获一些真数据。先贴源码,思路其实很简单,想必大家看了都能懂。using System.Collections.Generic;using System.Linq;using UnityEditor;using UnityEngine;public class DataClass{ public i

2020-05-30 10:49:58 617

原创 OpenGL中画三角形

最近导师给我一个任务,让我做数据可视化。类似这样的。其实很明显,就是对数据取点,然后用OpenGL画三角形就完事了。OpenGL中画三角形有三种方法:TRIANGLES、TRIANGLE_STRIP和GL_TRIANGLE_FAN。TRIANGLESGL_TRIANGLES是以每三个顶点绘制一个三角形。第一个三角形使用顶点v0,v1,v2,第二个使用v3,v4,v5,以此类推。如果顶点的个数n不是3的倍数,那么最后的1个或者2个顶点会被忽略。TRIANGLE_STRIP构建当前三角形的顶

2020-05-27 11:18:41 1331

转载 unity中的序列化

什么是序列化序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。简单的说就是把对象转换成字节然后到内存中,数据库中或者是文件中的一个过程。和TCP传输中将传输数据转换为字节流是一个道理。一般的序列化方法有bin、xml、json。序列化在Unity中当你能在unity的Inspector面板上看到变量...

2020-04-30 14:30:02 2889 1

转载 Unity中的MergeMesh

(合并前)这里我做了N个小球 叠加在一起可以看到这些小球的mesh很复杂。运行起来看一下batches达到了549,这是一个毁灭性的现象。会造成大量的draw call,导致性能降低。接下来进行 mergemesh(合并后)可以发现batches降低为9.观察合并后的Filter,和之前没什么两样using UnityEngine;public class China...

2020-04-28 17:27:46 480

原创 LCS

#include <bits/stdc++.h>using namespace std;int main(){ string s1, s2; cin >> s1; cin >> s2; int l1 = s1.size(), l2 = s2.size(), res = 0; vector<vector<int>> dp(...

2020-04-28 15:59:04 172

原创 并查集套路以及例题

例题:力扣547 一道经典的并查集class Solution {public: int pre[2000] = { 0 }; int find(int x) { while (pre[x] != x)x = pre[x]; return x; } void merge(int x, int y) { int a = find(x); int b = find(y...

2020-04-12 13:27:27 213

原创 滑动窗口套路以及例题

主要解决求最长不重复子串问题题解:#include<bits/stdc++.h>using namespace std;int main(){ int z, l = 0, r = 0, sum = 0; vector<int> vi; cin >> z; set<int> si; while (z--) { int c...

2020-04-11 16:57:11 450

原创 4月10日 腾讯IEG 游戏研发 暑期实习 一面(记录)

上来是一个声音很好听的面试官1.自我介绍2.后面基本全是根据项目具体询问3.Canvas->Batch4.批处理(动态,静态)5.OverDraw问题6.代码方面优化问题7.场景优化相关问题8.游戏逻辑设计以及具体实现9.对象池相关然后问我有没有什么想问的,我一看时间才20min,心想这肯定凉了,就想为自己争取一下,硬扯了一下kd树(前阵子大概了解过)10.好既然你说了...

2020-04-10 11:53:16 528 3

原创 C++全排列函数

题目描述牛牛有一个正整数x,牛牛需要把数字x中的数位进行重排得到一个新数(不同于x的数),牛牛想知道这个新数是否可能是原x的倍数。请你来帮他解决这个问题。输入描述:输入包括t+1行,第一行包括一个整数t(1 ≤ t ≤ 10), 接下来t行,每行一个整数x(1 ≤ x ≤ 10^6)输出描述:对于每个x,如果可能重排之后变为自己的倍数输出"Possible", 否则输出"Imp...

2020-04-08 22:06:43 230

原创 抽象类和接口的异同

接口和抽象类的区别:(1)抽象类可以有构造方法,接口中不能有构造方法。(2)抽象类中可以有普通成员变量,接口中没有普通成员变量(3)抽象类中可以包含静态方法,接口中不能包含静态方法(4) 一个类可以实现多个接口,但只能继承一个抽象类。(5)接口可以被多重实现,抽象类只能被单一继承(6)如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口...

2020-04-01 10:48:02 193

转载 AssetBundle详解与优化

1. AssetBundle原理AssetBundle是Unity中的一种资源包,这种资源包可以是游戏内要用到的几乎所有资源,例如:模型、纹理、预设、场景等大部分文件更新,并且可以在运行时动态加载。值得注意的是AssetBundle是可以多个文件一起打包,例如将要打包的资源做成预设后再进行打包,这样可以将预设上面附带的组件、纹理、子对象等一并打包,加载后直接实例化就能直接使用了(并不是建议大家...

2020-03-30 13:01:25 300

原创 3月29日 网易雷火笔试(人生第一次笔试)记录

第一题(签到题)AC第一题刚开始觉得挺简单,就按常规方法:先dp求出F(N)的字符串,然后用map做容器计每个字母出现的次数。但是敲完了往上一贴,爆内存了。(出题人真鸡贼啊)然后开始优化优化思路:用3个map,map1记录s1中出现过的字符的次数,s1中没出现,s2中出现的,这里记0。map2记录s2中出现过的字符的次数,s2中没出现,s1中出现的,这里记0。map3先将s1+s2中...

2020-03-29 22:01:40 1500

原创 协程和线程的区别

什么是协程协程是一种用户态的轻量级线程,协程的调度完全由用户控制。从技术的角度来说,“协程就是你可以暂停执行的函数”。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。协程与线程的区别:一个线程可以多个协程,一个进程也可以单...

2020-03-24 17:33:01 533

转载 字符串拷贝的方法和陷阱

下面我主要说说memcpy、strcpy、string::copy这三种内存拷贝memcpy陷阱内存拷贝不会对字符串结束符’\0’进行检查结果拷贝结束后,在字符串末尾会出现乱码。解决方案申请内存时多申请一个字节内存,以保证将字符串结束符拷贝进去。字符串拷贝strcpystrcpy是专用于字符串拷贝的函数,与memcpy的区别就是,它会检测结束符’\0’,所以在申请内存时不用做多余...

2020-03-24 16:55:49 333

转载 代码到可执行文件中间经历的过程

大致过程可分为以下4个步骤:预处理->编译->汇编->链接一、预处理处理源代码文件以“#”开始的预编译指令。1)展开宏定义2)处理所有条件编译指令3)处理#include预编译指令,递归地将被包含的文件插入进来4)删除注释5)添加行号和文件名标识,这样编译器产生错误和警告时才能显示行号6)保留#pragma编译器指令最终生成.i文件(c语言),或者.ii文件(...

2020-03-24 16:20:56 353

转载 操作系统中的几种进程调度算法

先来先服务调度算法先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。所以,本算法适合于CPU繁忙型作业,而不利于I/O繁忙型的作业(进程)。短作业优先调度算法短作业(进程)优先调度算法(SJ/PF)是指对短作业或短进程优先调度的算法,该算法既可用于作业调度,也可用于进程调度。但其对长作...

2020-03-24 15:36:28 1338

原创 面试题 16.07. 最大数值

int maximum(int a, int b){ long k = (((long)a - (long)b) >> 63) & 1;//取符号位 return b * k + a * (k ^ 1);}思路:问题两个,一个是怎么取出int类型的符号位,另一个是超过int类型怎么办。这里需要了解一下long或者是int类型了。符号位都是在第一位上的,也就是说l...

2020-03-03 19:57:41 173

原创 面试题 02.01. 移除重复节点

ListNode* removeDuplicateNodes(ListNode* head){ if (head == NULL || head->next == NULL) return head; set<int> si; ListNode* l1 = head, * l2 = head->next; si.insert(l1->val); while...

2020-03-02 22:11:10 104

转载 摩尔多数表决算法(Moore Majority Vote Algorithm)

摩尔多数表决算法(Moore majority vote algorithm)也叫摩尔投票法。摩尔投票算法是一种使用线性时间和常数空间查找大部分元素序列的算法。它以1981年出版的Robert S. Boyer和J Strother Moore的名字命名,并且是流式算法的典型例子。首先请考虑最基本的摩尔投票问题:找出一组数字序列中出现次数大于总数1/2的数字(并且假设这个数字一定存在)...

2020-01-05 15:10:44 1862

原创 BST的后序遍历序列

递归:bool pp(const vector<int> vi, int start, int end){ if (start >= end)return 1; int i = start; while (i <= end && vi[i] < vi[end])i++; for (int j = i;j <= end;j++)if (...

2020-01-03 14:08:43 521

原创 54. 螺旋矩阵

vector<int> spiralOrder(vector<vector<int>>& matrix){ vector<int> vi; if (matrix.size() == 0 || matrix[0].size() == 0)return vi; int row = matrix[0].size(), line = matr...

2020-01-02 20:25:54 105

原创 打印从1到最大的n位数

题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。题目乍一看很简单,看到这个问题的时候,最容易想到的方法就是先求出最大的n位数,然后一个循环开始打印。这样想是没错的,那现在我给你一个很大的n呢?如果n比longlong还大呢?很显然上面的想法在大数问题下已经行不通了。我们可以换一种思路:在字符串上模拟数字加法,之后打印字符...

2020-01-01 15:11:46 139

原创 343. 整数拆分

可以用dp做,但是时间复杂度O(n^2),空间复杂度O(n),效果很不理想,尽管这道题考察的是dp。但是算法的根本目的是以最高性能解决实际问题。这里贴一个数学方法。int integerBreak(int n){ if (n <= 2)return 1; if (n == 3)return 2; int i = 0, a = 1; while (n > 4) { n...

2019-12-31 16:41:29 93

原创 287. 寻找重复数

题目乍一看很简单,但是记住,简单的问题既然问出来,那就一定不简单。第一种方法(弟中弟解法):int findDuplicate(vector<int>& nums){ if (nums.size() == 0)return 0; sort(nums.begin(), nums.end()); for (int i = 0; i < nums.size() - ...

2019-12-27 16:29:44 158

原创

1.什么是多态?为什么用多态?有什么好处?多态在什么地方用?什么是多态?概念:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象。为什么要用多态呢?原因:我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态除了代码的复用性外,还可以解决项目中紧偶合的问题...

2019-12-26 21:30:51 360

原创 C++成员变量的初始化顺序

顺序为:基类的静态变量或全局变量派生类的静态变量或全局变量基类的成员变量派生类的成员变量注意:成员变量在使用初始化列表初始化时,与构造函数中初始化成员列表的顺序无关,只与定义成员变量的顺序有关。如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。类中const成员常量必须在构造函数初始化列表中初始化。类中static成员变量,必须在类外初...

2019-12-26 21:01:08 170

原创 C++中的初始化列表

class A{public: A() :i2(0), i1(i2 + 2){}private: int i1, i2;};这就是一个初始化列表,初始化列表以该类的构造函数开始,以冒号和后面紧跟一系列以逗号分隔的初始化字段。要值得注意的是:初始化列表在构造函数之前执行,如果在初始化列表中赋值,在构造函数中赋的值会覆盖。使用初始化列表的原因使用初始化列表可以提升少部分性能...

2019-12-26 20:49:31 228

原创 循环队列

顾名思义,循环队列是一种队列。循环队列常用与服务器用户排队等待情况。循环队列具有头指针f和尾指针r,头指针f指向队列中实际存在的第一个值,r指向队列中实际存在的最后一个值的下一个位置。为什么要指向下一个位置?我们先假设尾指针r指向队列中实际存在的最后一个值。f为首,r为尾push:r=(r+1)%npop:f=(f+1)%n什么时候队列为空呢?删完了不就为空了,那么我们让f开始删...

2019-12-25 21:24:53 890

原创 快速幂

一般求a的b次是这样写:int poww(int a, int b){ int ans = 1; while (b--)ans *= a; return ans;}这样确实没问题,但是时间复杂度是O(n)。如果要计算2的100次,那就要跑100次while循环,效率很低。快速幂假设要求2的11次,其实可以把11拆分成2进制形式:11的2进制是 1011a11=a(2^ 0...

2019-12-25 16:27:45 92

原创 1010. 总持续时间可被 60 整除的歌曲

int numPairsDivisibleBy60(vector<int>& time){ map<int, int> mii; int index = 0; for (int i : time) { i %= 60; if (i != 0)index += mii[60 - i]; else index += mii[0]; mii[i]...

2019-12-25 14:21:03 90

原创 367. 有效的完全平方数

自己写的渣解 竟然跑到1344ms 也是真够渣的。。。bool isPerfectSquare(int num){ if (num == 1)return true; int k = num >> 1; bool cxk = false; float f = 0; for (int i = 1; i <= k; i++) { if ((float)num / ...

2019-12-25 13:36:59 108

原创 203. 移除链表元素

class Solution {public: ListNode* removeElements(ListNode* head, int val) { ListNode* h = new ListNode(0);//这里必须给一个值 h->next = head; ListNode* c = h; while (c->next)...

2019-12-24 17:41:36 114

空空如也

空空如也

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

TA关注的人

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