首页 > TAG信息列表 > 磊磊

磊磊零基础打卡算法:day17 c++堆排序

5.20 前言吐槽: 今天是5.20啦,但是作为单身修狗的我只能和代码过啦。。。继续加油算法打卡!!! 堆排序: 堆就是一棵完全二叉树 二叉堆是一种支持插入,删除,查询最值的数据结构。他其实是一棵满足"堆性质"的完全二叉树,树上的每个节点带有一个权值。若树中的任意一个节点的权值都小于

磊磊零基础打卡算法:day16 c++ Trie树

5.19 Trie树: 用处:快速的查找和高效存储字符串集合的数据结构。     类似如此的查找,存储 其简单的两个操作:插入和删除 插入: void insert(char str[]) { int p; //定义数据前一位的位置 for (int i = 0; i < str[i]; i++) { int u = str[i] - 'a'

磊磊零基础打卡算法:day15 c++ kmp算法简单操作

5.18 kmp算法 核心思想:在每次失配时,不是把p串往后移一位,而是把p串往后移动至下一次可以和前面部分匹配的位置,这样就可以跳过大多数的失配步骤。而每次p串移动的步数就是通过查找next[ ]数组确定的。 成员变量:ne[]记录的匹配数组;双指针i,j; KMP主要分两步:求next数组、匹配字

磊磊零基础打卡算法:day12 c++静态单链表

5.15 静态单链表 简单的方法: 成员变量: int e[N],//存放节点的值 ne[N],存放结点的next head,头结点指针 idx;变化的指针 初始化: void init() { head = -1;//头结点最初指向-1 idx = 0;//初始的位移指针是0; } //初始化链表 在头部位置添加: void add_to_head

磊磊零基础打卡算法:day11 c++ 区间合并

5.12 区间合并问题: 题目描述:给出n段区间,如果区间内,l -r存在交集,那么就可以合并,需要更新区间,如果不存在交集,那么就直接将单独的区间个数++,最后返回区间合并后的区间个数     解题思路: 将区间通过pair进行归类,并排序(可以去除包含的区间,并且可以从小到大排序也方便进行

磊磊零基础打卡算法:day09 c++ 双指针,二进制转换

5.10 双指针算法 一般都是先有暴力直接解法的情况下进行优化,最常用的有滑动窗口,将字符串换行,将原来o(n2)的复杂度降为o(n); 特别注意:这里的双指针一般是有序的,而且存在单调性;如果没有序,建议先sort, 双指针分为两种情况:两条路径,还有一条路径对碰指针;     例题 给定一个

磊磊零基础打卡算法:day07 c++ 前缀和,二维前缀和

5.7 一维前缀和 主要思想; 初始化前缀和数 由于存在s[i] =s[i-1]+a[i];s是前缀和,a[i]是每一位的数;所以需要将i从1开始读入所有的数 for (int i = 1; i <= n; i++) { s[i] = s[i - 1] + q[i]; } //求区间的前缀和 cout << s[r] - s[l - 1] << endl;//l - r 上的区

磊磊零基础打卡算法:day05

5.5 快速排序模板类型     主要思想:分治; 对于这种边界容易出错的,直接背过模板就好 这里是需要先找出x分界点对其进行比较,然后比较,最后递归, void quick_sort(int q[], int l, int r) { if (l >= r)//如果左边大于有右边那么不符合条件,退出 return; int x =