算法基础11 哈希表
1.模拟散列表开放寻址法「解题思路:」 用2 ~ 3倍的空间来存储,这样一般不会发生溢出问题。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include <bits/stdc++.h>using namespace std;const int N = 200003,null = 0x3f3f3f3f;int h[N];// find 函数:如果是 x在h中不存在,则返回其该插入的位置// 如果存在,则返回其所在的位置int find(int x){ int k = (x % N + N) % N; while(h[k] != null and h[k] != x) { k++; if(k == N) { k = 0; } } return k; ...
算法基础10 堆
1.堆排序测试数据
根节点不包含字符,除根节点外的每一个子节点都包含一个字符。从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。每个节点的所有子节点包含的字符互不相同。通常在实现的时候,会在节点结构中设置一个标志,用来标记该结点处
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#include <bits/stdc++.h>using namespace std;// 手写一个堆// 1.插入一个数// 2.求集合当中的最小值// 3.删除最小值// 4.删除任意一个元素// 5.修改任意一个元素const int N = 100010;int n, m;int h[N], cnt;void down(int u){ int t = u; if (u * 2 <= cnt and h[u * 2] < h[t]) t = u * 2; if (u * 2 + 1 &l ...
算法基础09 合并集合
模板「重要的find函数:」
12345678910// 返回祖宗节点 + 路径压缩int find(int x){ if(p[x] != x) { p[x] = find(p[x]); } return p[x];}
1.合并集合1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int arr[N];int find(int x){ if (arr[x] != x) { arr[x] = find(arr[x]); } return arr[x];}int main(){ int n, m; cin >> ...
算法基础08 tire树
1.tire树「tire数定义:」
什么是Trie树Trie树,又叫字典树、前缀树(Prefix Tree)、单词查找树 或 键树,是一种多叉树结构。如下图:
上图是一棵Trie树,表示了关键字集合{“a”, “to”, “tea”, “ted”, “ten”, “i”, “in”, “inn”} 。从上图可以归纳出Trie树的基本性质:
根节点不包含字符,除根节点外的每一个子节点都包含一个字符。从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。每个节点的所有子节点包含的字符互不相同。通常在实现的时候,会在节点结构中设置一个标志,用来标记该结点处是否构成一个单词(关键字)。
可以看出,Trie树的关键字一般都是字符串,而且Trie树把每个关键字保存在一条路径上,而不是一个结点中。另外,两个有公共前缀的关键字,在Trie树中前缀部分的路径相同,所以Trie树又叫做前缀树(Prefix Tree)。
「变量介绍:」
123C++int arr[N][30], cnt[N], idx; // 二维数组 N 对应字符串最大长度,30对应 26个字的26种状态,这里稍微增大 ...
算法基础07 字符串比较大小问题
C++ string字符串比较方法详解字符串可以和类型相同的字符串相比较,也可以和具有同样字符类型的数组比较。
Basic_string 类模板既提供了 >、<、==、>=、<=、!= 等比较运算符,还提供了 compare() 函数,其中 compare() 函数支持多参数处理,支持用索引值和长度定位子串进行比较。该函数返回一个整数来表示比较结果。如果相比较的两个子串相同,compare() 函数返回 0,否则返回非零值。
compare()函数类 basic_string 的成员函数 compare() 的原型如下:
123456PLAINTEXTint compare (const basic_string& s) const;int compare (const Ch* p) const;int compare (size_type pos, size_type n, const basic_string& s) const;int compare (size_type pos, size ...
算法基础06 kmp字符串匹配算法
1.kmp 字符串匹配「kmp算法介绍:」
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n) [1]。
字符串的模式匹配是一种常用的运算。所谓模式匹配,可以简单地理解为在目标(字符串)中寻找一个给定的模式(也是字符串),返回目标和模式匹配的第一个子串的首字符位置。通常目标串比较大,而模式串则比较短小。
简洁来说,就是在较长的字符串S中寻找子串P是否存在以及多少个的问题。
「实现思路:」
朴素做法:可以使用暴力枚举,但是时间复杂度高,耗时。
优化做法:使用ne[]数组存储子串P最大匹配后缀与最匹配大前缀的下标。
如果遇到不匹配,则跳到P子串与当前位置元素匹配的最大前缀位置。
这么说可能很抽象,画图表示。
假如以上 S (长传)与 P(子串)
先让P匹配自己,让每一 ...
算法基础05 单调队列--滑动窗口
1.滑动窗口「实现思路:」
滑动窗口可以用对列实现,k 就对应队列的长度,最朴素的方式是使用暴力枚举,但是时间复杂度较高。
降低时间复杂度则可以使用单调队列,那么什么是单调队列呢?
单调队列:假设我们要求的一块区域为3的最小值,那么我们在数组循环的时候,让队头默认最小值,而且对列里的数必须是单调递增,因为只有这样,才能保证队头最小,每次不用循环枚举浪费多余时间,直接输出区域内最小值。
「变量介绍:」
123const int N = 1e6 + 10; int arr[N]; // 这是存储所有元素的数组集合int k_arr[N]; // 这是单调对列,存储的是元素的下标值,要获取值 则 通过 arr[k_arr[x]] 获取对应值。
「具体做法:」
每次循环,先判断当前队列是否超出 k 的长度,超出则让单调对列的头指针后移一位。
然后再判断当前元素 x 与单调队列的尾元素的大小关系。
x > 单调队列[end] :就让x 的下标添加进队尾。
x > 单调队列[end]:就让单调对列的队尾弹出,在循环进行判断大小关系,直到队尾 < x元素或者队为 ...
算法基础04 数据结构:单链表+双链表
1.单链表「常见实现方式」:
STL vector :直接使用库函数,方便。
结构体: 最常规的数据结构,按部就班的来。
静态数组:数组模拟在算法题中提高运行速度。
「采用静态数组」:
「变量介绍」:
e[N]: 存储每一个插入的元素的值。
ne[N]: 存储每一个元素的下一个元素对应的的数组下标。
head: 存储 头节点的下标。
idx: 是计量数,可以理解为每插入一个元素都会追加在e[N]数组里,而idx表示当前到第几个该插入了,插入后idx++。
1int e[N], ne[N], head, idx;
「实现思路:」
初始化 head 为 -1,首先head指向空。初始化 idx 为0,从下标0开始记录。
指令为 ‘H’,表示在链表最头部插入,也就是头节点,对应代码
123456789// 在链表头插入void into_head(int x){ e[idx] = x; // 先存下当前要插入元素 ne[idx] = head; // 让 当前点的指向的下一个元素的下标 为 head的下一个, //因为头结点之前可能指向 a,你要在头结点插 ...
NodeJs学习记录
1.node简介
Node是一个基于Chrome V8引擎的JavaScript代码运行环境。
2.Node运行环境安装3.快速入门
在控制台 进入当前目录
123// 语法 node ***.js
npm切换源
获取原本镜像地址
设为淘宝镜像
获取原本镜像地址12npm get registry 1
https://registry.npmjs.org/
设为淘宝镜像123npm config set registry http://registry.npm.taobao.org/yarn config set registry http://registry.npm.taobao.org/
2.global
4.模块化开发概述
JavaScript在使用时存在两大问题,文件依赖和命名冲突。
开发规范
导出方式1
方式2
但是
// 当exports 对象 和 moudle.exports 对象指向的不是同一个对象时 以module.exports为准
123456789101112const greeting = name =&g ...
jquery+nodejs-博客项目
1.初始化123外链css等写绝对路径 (浏览器解析 相对于 浏览器地址)模板位置写 绝对路径 调取公共部分 不许要写绝对路径 (模板引擎解析 写相对)
1234567891011121314151. 建立项目所需文件夹public 静态资源model 数据库操作route 路由views 模板2. 初始化项目描述文件npm init -y3. 下载项目所需第三方模块npm install express mongoose art-template express-art-template4. 创建网站服务器5. 构建模块化路由6. 构建博客管理页面模板npm install express mongoose art-template express-art-template
1.1 路由模块化新建文件夹 route 里面新建 admin.js 与 home.js
之后 设置请求方式 和做出响应 admin页面同理
12345678910// 引入 expressconst express = require('express');const ho ...





