哈夫曼编码(字符串压缩) 之前去面试,被面试官问到这么一个问题:假如现在有一个设备,仅允许输入a~z以及空格这27个字符,请问,如何编码保存,能使其占用的内存空间最小?刚开始答的时候,想到了用asc编码的形式,将27个字符分别用27位十进制数字进行保存,之后再将这27个十进制数字转为二进制存储到硬盘中,其占用的大小小于 25 字节(00000~11111),之后面试官又问:如果当前字符串是连续的多个字符组成的,...
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状态;...
DayTwentyEight 并查集笔记 所谓并查集,就是对集合的合并和查询的操作(union&find)//并查集的模板代码class UnionFind {public: vector<int> father; UnionFind(int num) {//num表示元素个数 for (int i = 0; i < num; i++) { father.push_back(i); }...
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...
DayTwentyFive Dp一点点 解决DP问题时,需要先确定初始状态,然后确定如何转移状态,再编程进行求解。前序遍历的迭代写法 vector<int> preorderTraversal(TreeNode* root) { vector<int> res; while (root) { if (!root->left) { res.push_back(roo...
DayTwentyFour 烦人的笔试 resize() 方法可以为数组提前分配大小,但不分配内存。当一个数在一堆数中出现的次数大于整体个数的一半时 可以用以下代码找出这个数 int moreThanHalfNum_Solution(vector<int>& nums) { int cnt = 0, val = -1; for (auto x : nums) { if (!cnt) val ...
DayTwentyThree 烦人的笔试 初始数据集的排列顺序对算法的性能无影响的算法有:选(直接选择排序)归(归并排序)堆(堆排序)影响排序算法时间复杂度的主要原因是比较的次数基于比较的排序算法有:直接插入排序冒泡排序简单选择排序希尔排序快速排序堆排序归并排序基数排序、桶排序都属于分配式排序,且都是稳定排序算法比较次数与序列初始状态无关的排序方法简单选择排序二分插入排序...
DayTwentyTwo 依旧是笔记呀 今天用到的数据结构//如果可以的话,尽量使用pair替代简单的结构体,方便使用,且pair在排序的时候,会自动按照first域进行排。struct ListNode{ int val; ListNode* next; ListNode(int x) : val(x), next(NULL){}};struct TreeNode{ int val; TreeNode* l...
DayTwentyOne 容器与迭代器 标准库中的容器是泛型数据结构,特别适合保存数据集合。使用标准库时,几乎不需要使用标准C风格数组、编写链表或者设计堆栈。容器被实现为类模板,因此可利用任何满足以下基本条件的类型进行实例化。除array和bitset外,大部分标准库容器的大小灵活多变,都能实现自动增长或收缩,以容纳更多或更少的元素,和固定大小的旧的标准C风格数组相比,这有着巨大的优势。由于本质上标准C风格数组的大小是固定的,因此容易...
DayNineteen STL的笔记~ VECTORvector本身可以作为数组使用,而且一些元素个数不确定的场合可以很好地节省空间。SETset的主要作用是自动去重并按升序排序,因此碰到需要去重但是却不方便直接开数组的情况,可以尝试用set解决。另外 C++中增加了unordered_set,以散列代替set内部的红黑树实现,使其可以用来处理只去重但不排序的需求,速度比set要快得多。STRING只能使用CIN ...
DaySeventeen 就还叫你笔记吧! 今天在看背包问题啊,粗略的分一下,大概有下面几种背包问题01背包问题完全背包问题多重背包问题混合背包问题二维费用的背包问题分组背包问题有依赖的背包问题0x01 01背包问题有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。这是最基础的背包问题,给出的物品仅有两种选择,...
dd大牛的《背包九讲》 P01: 01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{...