自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

胡胖胖的鱼塘

胡胖胖的鱼塘可是用来养鲨鱼的哦!

  • 博客(45)
  • 资源 (1)
  • 收藏
  • 关注

原创 哈夫曼编码(字符串压缩)

之前去面试,被面试官问到这么一个问题:假如现在有一个设备,仅允许输入a~z以及空格这27个字符,请问,如何编码保存,能使其占用的内存空间最小?刚开始答的时候,想到了用asc编码的形式,将27个字符分别用27位十进制数字进行保存,之后再将这27个十进制数字转为二进制存储到硬盘中,其占用的大小小于 25 字节(00000~11111),之后面试官又问:如果当前字符串是连续的多个字符组成的,...

2019-10-24 11:18:08 3944

原创 面试准备

为了更好的offer 加油!

2019-09-24 09:30:16 367

原创 面试可能会用到的代码

面试常考的几个问题

2019-09-23 21:38:59 200

原创 2019 9 20 nice凉面

TCP握手协议在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack = j + 1),同时自己也发送一个SYN包(syn = k),即SYN+ACK包,此时服务器进入SYN_RECV状态;...

2019-09-20 22:14:12 131

原创 DayTwentyEight 并查集笔记

所谓并查集,就是对集合的合并和查询的操作(union&find)//并查集的模板代码class UnionFind {public: vector<int> father; UnionFind(int num) {//num表示元素个数 for (int i = 0; i < num; i++) { father.push_back(i); }...

2019-08-26 15:24:02 89

原创 DayTwentySeven 今天美团笔试 = =

不使用除法求一串序列除掉某个数的乘积class Solution {public: vector<int> pre, bac, output; vector<int> productExceptSelf(vector<int>& nums) { int res = 1; for (int i = 0; i < nums.size...

2019-08-22 12:32:05 100

原创 DayTwentySix 今日份笔记

做递归问题时的思考方法状态的含义是什么(通过所求答案得出状态含义)顺序是什么确定结束状态

2019-08-18 12:34:56 111

原创 DayTwentyFive Dp一点点

解决DP问题时,需要先确定初始状态,然后确定如何转移状态,再编程进行求解。前序遍历的迭代写法 vector<int> preorderTraversal(TreeNode* root) { vector<int> res; while (root) { if (!root->left) { res.push_back(roo...

2019-08-17 19:28:47 96

原创 DayTwentyFour 烦人的笔试

resize() 方法可以为数组提前分配大小,但不分配内存。当一个数在一堆数中出现的次数大于整体个数的一半时 可以用以下代码找出这个数 int moreThanHalfNum_Solution(vector<int>& nums) { int cnt = 0, val = -1; for (auto x : nums) { if (!cnt) val ...

2019-08-16 15:07:53 84

原创 DayTwentyThree 烦人的笔试

初始数据集的排列顺序对算法的性能无影响的算法有:选(直接选择排序)归(归并排序)堆(堆排序)影响排序算法时间复杂度的主要原因是比较的次数基于比较的排序算法有:直接插入排序冒泡排序简单选择排序希尔排序快速排序堆排序归并排序基数排序、桶排序都属于分配式排序,且都是稳定排序算法比较次数与序列初始状态无关的排序方法简单选择排序二分插入排序...

2019-08-15 13:53:45 92

原创 DayTwentyTwo 依旧是笔记呀

今天用到的数据结构//如果可以的话,尽量使用pair替代简单的结构体,方便使用,且pair在排序的时候,会自动按照first域进行排。struct ListNode{ int val; ListNode* next; ListNode(int x) : val(x), next(NULL){}};struct TreeNode{ int val; TreeNode* l...

2019-08-14 15:37:10 91

原创 DayTwentyOne 容器与迭代器

标准库中的容器是泛型数据结构,特别适合保存数据集合。使用标准库时,几乎不需要使用标准C风格数组、编写链表或者设计堆栈。容器被实现为类模板,因此可利用任何满足以下基本条件的类型进行实例化。除array和bitset外,大部分标准库容器的大小灵活多变,都能实现自动增长或收缩,以容纳更多或更少的元素,和固定大小的旧的标准C风格数组相比,这有着巨大的优势。由于本质上标准C风格数组的大小是固定的,因此容易...

2019-08-13 19:02:14 97

原创 DayTwenty 今日份笔记

写循环的时候,如果需要变量最终值大于等于零,可以使用~i替代 i>=0STL容器的一点小总结。

2019-08-12 14:27:43 94

原创 DayNineteen STL的笔记~

VECTORvector本身可以作为数组使用,而且一些元素个数不确定的场合可以很好地节省空间。SETset的主要作用是自动去重并按升序排序,因此碰到需要去重但是却不方便直接开数组的情况,可以尝试用set解决。另外 C++中增加了unordered_set,以散列代替set内部的红黑树实现,使其可以用来处理只去重但不排序的需求,速度比set要快得多。STRING只能使用CIN ...

2019-08-11 12:16:46 72

原创 DayEighteen 大概还是笔记吧

vector构造的时候,可以将现有的数组进行逆序输出:vector<int> (res.rbegin(),res.rend());

2019-08-10 22:05:24 92

原创 DaySeventeen 就还叫你笔记吧!

今天在看背包问题啊,粗略的分一下,大概有下面几种背包问题01背包问题完全背包问题多重背包问题混合背包问题二维费用的背包问题分组背包问题有依赖的背包问题0x01 01背包问题有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。这是最基础的背包问题,给出的物品仅有两种选择,...

2019-08-09 19:30:04 208

原创 DaySixteen 笔记

在在线平台进行OJ的时候,记得一定要初始化变量,不管是什么类型,都要记得初始化!!!

2019-08-09 18:58:47 124

转载 dd大牛的《背包九讲》

P01: 01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{...

2019-08-09 11:38:29 200

原创 DayFifteen 难搞哦,还是笔记呀

return !b ? a : gcd(b, a % b);//求公约数心情不好= =

2019-08-08 10:23:03 82

原创 DayFourteen 字符串笔记

查找一个字符串中包含的一个重复子串可以用以下代码 while(k < s.size() && s[k] == s[j])k++;//循环结束后,K是重复字符的最后一个的下一个。如果想要按照字典序排序一个单词,可以采用sortsort(str.begin(),str.end());vector里面插入元素的时候如果想要按key插可以采用以下方法vect...

2019-08-05 13:28:08 118

原创 DayThirteen 笔记

使用sort函数时,可以传入第三个参数,作为排序的顺序参考,例如:bool cmp(pair<double, double> a, pair<double, double> b){ return a.second > b.second;//从大到小排序}int main(){ sort(danjia, danjia + n, cmp);}记录...

2019-08-04 14:50:14 80

原创 DayTwelve 归并和快排其他代码

之前在另一篇博文里面写了七种排序的算法,其中一些在有些情况下还有bug,今天进行复盘,重新学习一下。归并排序void mergesort(int q[], int l, int r){ int tmp[1000010];//这个数组用来存放临时排好序的序列,在后面会将这个数组复制到答案中。 if (l >= r)return;//如果边界条件达到,就结束递归 int mid...

2019-08-03 11:02:20 110

原创 DayEleven 还是笔记呀

memcpy(a,b,sizeof b); 可以使用这个操作,将b数组里面的所有值全部拷贝给aa>>i & 1 这个操作可以判断a的二进制位的第i位是不是为1

2019-08-02 20:13:34 146

原创 DayTen 依旧是笔记呀

c++中读取一整行数据时,可以采用String类库中的getline 函数 具体使用 getline(cin,str),这样读入的数据就是包含输入的空格,方便后续的操作。以下这一点代码,可以将输入的字符按空格分割放入栈中 stack<string> stk; string str = " "; getline(cin, str); string temp = "";...

2019-08-01 13:42:31 141

转载 常用代码模板4——数学知识

算法基础课相关代码模板试除法判定质数 —— 模板题 AcWing 866. 试除法判定质数bool is_prime(int x){ if (x < 2) return false; for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) return false; re...

2019-08-01 12:54:55 247

转载 常用代码模板3——搜索与图论

算法基础课相关代码模板树与图的存储树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b, b->a。因此我们可以只考虑有向图的存储。(1) 邻接矩阵:g[a][b] 存储边a->b(2) 邻接表:// 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点int h[N], e[N], ne[N], i...

2019-08-01 12:52:02 204

转载 常用代码模板2——数据结构

算法基础课相关代码模板活动链接 —— 算法基础课单链表 —— 模板题 AcWing 826. 单链表// head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点int head, e[N], ne[N], idx;// 初始化void init(){ head = -1; idx = 0;}// 在链表头插入一个数...

2019-08-01 12:48:53 194

转载 常用代码模板1——基础算法

算法基础课相关代码模板活动链接 —— 算法基础课快速排序算法模板 —— 模板题 AcWing 785. 快速排序void quick_sort(int q[], int l, int r){ if (l >= r) return; int i = l - 1, j = r + 1, x = q[l + r >> 1]; while (i <...

2019-08-01 12:44:13 261

原创 DayNine 笔记

在使用memset函数的时候,尽量将值赋为0或1.合并两个有序链表的时候,可以建两个空指针,分别遍历两个链表,比较大小之后加入答案链表struct ListNode { int val; ListNode* next; ListNode(int x) : val(x), next(NULL) {}};ListNode* mergeTwoLists(ListNode* l1...

2019-07-31 13:40:19 79

原创 DayEight C++的一些小技巧

x & 0x01当一个数和0x01做与运算时,可以得到该数的二进制的最后一位。x=x>>1左移操作相当于删除该数二进制位的最后一位,右移反之。在使用Swap函数交换两个结点的时候,其结点的左右儿子也会跟着一起被交换在寻找一棵二叉树的最大深度时,可采用递归的办法,每次查找当前子树的最大深度,再加一就是根节点的深度。两个小时十道题应该可以吧,加油!...

2019-07-30 14:15:37 91

原创 DaySeven 关于树的一些简单操作

使用long long类型可以防止数据在和INT_MIN 或者INT_MAX进行操作时,数据溢出。使用如下面所示的代码可以比较一棵二叉树是否左右对称 bool isSymmetric(TreeNode* root) { if(!root) return true; return dfs(root->left, root->right);...

2019-07-29 13:57:37 107

原创 DaySix 一些小的知识点

在使用unsigned int型变量接收int型变量赋值的时候,如果是负数,接收到的值为该负数的二进制补码。vector < vector<bool>> st(10, vector<bool>(20)) 可以采用这样的形式去创建一个vector二维数组,且第二维为一个bool值。queue<pair<int, int>> q...

2019-07-28 13:48:20 131

原创 DayFive Map的使用

MapMap是STL的一个关联容器,内部采用红黑树进行实现,它提供一对一的hash。使用Map时,需包含头文件<map>,实例化一个map对象的时候,需要传入两个模板参数,其中,一个参数作为索引,另一个参数作为存入内容的类型。使用 map.size()函数获取到当前map中包含的元素个数如果存入的元素是一对,可以采用 map.first.first进行访问....

2019-07-26 11:44:31 110

原创 DayFour C++的编程技巧

智能指针对象不需要手动释放内存,内存会自动释放,调试的时候,可以看到在智能指针对象的结构体中,有一个叫deleter的域,猜测可能是该域完成对指针对象的释放。默认情况下,编译器会自动生成复制构造函数,而大多数情况下,这个复制构造函数已经可以满足大多数情况下的使用。...

2019-07-24 11:26:12 120

原创 DayThree 面向对象设计模式

面向对象设计模式遵从面向对象开发语言的三大设计原则:封装、继承、多态在编写类的时候,要注意每个类应该仅有一个引起他变化的原因,即单一职责原则。在设计类的时候应当注意,类的模块应该是可以拓展的,但是不可以被修改,这称为开放封闭原则。编写出来的从父类继承得到的子类应该能够替换基类,这称为Liskov替换原则高层的模块不应当依赖于底层模块,二者都应当依赖于抽象,抽象不应该依赖于实现...

2019-07-24 10:59:54 78

原创 DayTwo 二分及代码风格

代码风格这里不细说喽。今天最大的收获就是二分算法!首先,二分算法中最重要的一点就是去找那个cheak函数,也就是判断下一个边界怎么变化的条件。按照yxc总结的模板来说算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。int bsearch_1(int l, int r){ while (l < r) ...

2019-07-21 18:15:22 93

原创 DayOne C++基础知识复习

在C++中,一般在头文件(.h)中定义,然后在源文件(.cpp)中进行实现。旧版C++中使用#ifndef[key] #endif 来确保头文件只引用了一次,保证不会循环引用。最新的编译器使用#pragma once指令来确保不会出现循环引用。使用endl来表示一行输出的结尾,或者是使用‘\n’来表示一行的结尾。与cout和cin这两个流输入输出方式相比起来,printf和sc...

2019-07-20 13:16:05 75

原创 算法第四版 回环变位

如果字符串s中的字符循环移动任意位置之后能够得到另一字符串t,那么s就被称为t的回环变位(circular rotation)。例如,ACTGACG 就是 TGACGAC 的一个回环变位,反之亦然。判定这个条件在基因组序列中的研究是十分重要的。编写一个程序检查两个给定的字符串s和t是否互为回环变位。提示:答案只需要一行用到indexOf()、length()和字符串连接的代码。简单分析可知...

2019-07-02 11:32:16 144

原创 一些小技巧,想起来了就码上!

printf、scanf的输出、输出效率要比cout、cin高很多数组的长度可以使用sizeof函数求得 sizeof(array)/sizeof(array[0]);

2019-07-01 16:45:27 75

原创 使用递归和非递归的方式实现二分查找

通过二分查找的方式来寻找整个有序数组中的指定值,主要思想是引入了一个mid变量,用下标为mid的值来和要查询的key比较,如果小于key就把查询的下限变换为mid+1,如果大于key就把查询的下限变换为mid-1,直到找到指定元素或下限大于上限或上限小于下限。递归的实现方式类似,循环的将上限、下限传递到函数中,函数的边界条件就是 下限大于上限或者找到指定元素!#include <ios...

2019-07-01 16:42:34 423

标准库容器小结.pdf

STL标准库容器的一些复杂度分析,适用情况分析,性能比较等。

2019-08-12

空空如也

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

TA关注的人

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