算法基础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 ...
网站搭建——腾讯云SSL证书认证及部署
1.申请腾讯云SSL证书
https://console.cloud.tencent.com/ssl/dsc/apply
在上述链接填写相应信息,之后提交
之后在我的证书列表下载证书
2.在linux上部署nginx证书腾讯云有一键部署,但是我的服务器不支持,这里提供 nginx SSL证书的手动部署。
证书安装
请在 SSL 证书控制台 中选择您需要安装的证书并单击下载。
cloud.tencent.com 代指你的域名文件。
在弹出的 “证书下载” 窗口中,服务器类型选择 Nginx,单击下载并解压缩 cloud.tencent.com 证书文件包到本地目录。 解压缩后,可获得相关类型的证书文件。其中包含 cloud.tencent.com_nginx 文件夹:
文件夹名称:cloud.tencent.com_nginx
文件夹内容:
cloud.tencent.com_bundle.crt 证书文件
cloud.tencent.com_bundle.pem 证书文件
cloud.tencent.com.key 私钥文件
cloud.tencent.com.csr CSR ...
算法基础03 位运算+离散化+区间合并
1.双指针2.位运算3.离散化1.区间和「题解:」
把所有坐标存到坐标数组 index_arr 中,并排序,去重。
之后在一个全为0 的数组 a 中,根据 find 函数寻找 x 在index_arr的下标值,然后根据下标值在a中进行加减操作。
之后 进行前缀和,根据a中的数据进行前缀和。
之后处理询问。
「注意事项:」
在进行询问查找时,x对应的下标值必定存在数据不为0,因为明确对x进行的操作,但是 l,r不一定有值,但是一定存在 index_arr 数组里面占据一个位置。
因为占据位置,所以 a 里面如果有 l,r对应,一定存在空缺 0,所以可以安心进行前缀和操作。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081#include <bits/stdc++.h>using namespace std;c ...
算法基础02 高精度运算+前缀和+差分
1.高精度运算1.高精度加法「题解:」
对输入的两个 整数字符串进行倒序添加进数组,以方便从低位到高位的加法运算,这样如果最后有进位,直接在数组末尾进行push_back就行。
然后判断一下那个数大,默认A最大,加法只用考虑长度即可,长度相同加法无所谓。
之后进行按位相加,0~9相加不会超过 20,进位 t 只用考虑 1 or 0。
每次需要加的位需要进行对10取余,即 (ai + bi) % 10,因为加法、只会把个位的数加上去,十位则为进位。
然后判断 t ,看是否 进位即可。
「注意:」
这里 一开始 t为0,t 直接加a[i],之后看是否在 B的长度内,在就再加上bi,t 再除以10判断是否有进位。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152#include <bits/stdc++.h>using namespace std;const int N = 100000 + 10;vector<int> ...
算法基础01 排序+二分
1.排序1.快速排序
快速排序利用了递归的思想。
定义头指针,如果头指针对应的数 < arr[mid],l++,直到遇到大于等于 num的数。
定义尾指针,如果尾指针对应的数 > arr[mid],r–,直到遇到小于等于num的数。
当双方各遇到不符合条件的停止循环,进行数值交换。
每一轮循环会把路径上遇到的大于 arr[mid]的数放到右边,小于的放左边。
最后再次分置,再次递归以上过程,最后遇到 两个元素的组合(再往下递归,l = r,直接停止),假如是
元素
1
3
下标
4
5
mid取4,arr[mid] 为 1,头指针不满足 < 1的条件,则l不动;
尾指针满足 > 1的条件,尾指针 –,然后 头尾相等,结束循环;
实际顺序不变,因为就是 小到大。
元素
3
1
下标
4
5
加入为 3 ,1
头指针不满足 < 1,尾指针不满足 >1,且满足 头 < 尾,则交换元素。
12345678910111213141516171819202122232425262728293031 ...
hexo部署到远程服务器
1.配置免密登录「注意事项:」
注意一定要在当前登录用户的根目录下的.ssh放置公钥才有用!例如普通用户别去root的根目录下.ssh放置公钥,没有用!!!
另外自行创建.ssh文件夹会出现各种权限问题,最好使用命令
12// 远程主机同样使用此命令ssh-keygen -t rsa -C "2513177689@qq.com"
为本机生成钥匙对的同时顺带生成.ssh文件夹。
「方法:」
使用下例中ssky-keygen和ssh-copy-id,仅需通过3个步骤的简单设置而无需输入密码就能登录远程Linux主机。
ssh-keygen 创建公钥和密钥。
ssh-copy-id 把本地主机的公钥复制到远程主机的authorized_keys文件上。
ssh-copy-id 也会给远程主机的用户主目录(home)和/.ssh, 和/.ssh/authorized_keys设置合适的权限 。
步骤1: 用 ssh-key-gen 在本地主机上创建公钥和密钥
1ssh-keygen -t rsa -C "2513177689 ...
代码随想录训练营Day04_链表part2
1.两两交换链表中的节点
引用:代码随想录 (programmercarl.com)
力扣题目链接
建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。
初始时,cur指向虚拟头结点,然后进行如下三步:
操作之后,链表如下:
看这个可能就更直观一些了:
12345678910111213141516171819class Solution {public: ListNode* swapPairs(ListNode* head) { ListNode* dummyHead = new ListNode(0); // 设置一个虚拟头结点 dummyHead->next = head; // 将虚拟头结点指向head,这样方便后面做删除操作 ListNode* cur = dummyHead; while(cur->next != nullptr && cur->next->next != nullptr) ...