LRU
LRU 核心思想:优先淘汰最不被使用的元素,保留最经常被访问的k个元素,使得o(1)时间内高效完成对数据的查询操作,又兼顾了空间问题 “最近使用”意味着一个数据被读取或者写入后,其“使用时间”被更新到当前时间点。 “最少使用”即最长时间未被访问,则是最“冷”的数据,应被淘汰。 常用于操作系统页面置换,数据库缓存,web缓存等场景 12345678910111213141516171819202122232425262728293031323334353637383940#include<bits/stdc++.h>using namespace std;class LRU {public: LRU() {} LRU(int capacity_) : capacity(capacity_) {} int get(int key) { auto it = mp.find(key); if (it != mp.end()) { ...
codeforce1021div2D_BaggageClaim
题意每个机场都有一个行李索赔区,巴尔贝索沃机场也不例外。在某个时候,Sheremetyevo的一位管理员提出了一个不寻常的想法:将行李索赔传送带的传统形状从轮播更改为更复杂的形式。 假设行李索赔区域表示为大小 n×m 的矩形网格。管理局提出,输送机的路径应通过 p1,p2,…,p2k+1 的单元,其中 pi=(xi,yi) 。 对于每个单元格 pi 和下一个单元格 pi+1 (其中 1≤i≤2k ),这些单元格必须具有共同的侧面。此外,路径必须很简单,这意味着对于没有一对索引 i≠j ,如果单元格 pi 和 pj 的单元格。 不幸的是,路线计划被溢出的咖啡意外宠坏了,只保留了带有奇数指数的细胞: p1,p3,p5,…,p2k+1 。您的任务是确定给定这些 k+1 单元格的原始完整路径 p1,p2,…,p2k+1 的方法数量。 由于答案可能很大,因此输出它模拟 109+7 。 思路首先对于 p2i−1,p2i+1 ,如果 |p2i−1−p2i+1|≠2 的话答案一定是 0 ,即我们无法通过两步的操作从 p2i−1 走到 p2i+1 接下来我们进行建图,如果 p2i−1 与...
CodeforcesRound1018,Div.1+Div.2
A. Wonderful Sticks12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061#include<bits/stdc++.h>using namespace std;using i64 = long long;void solve() { int n; string s; cin >> n >> s; vector<int> f(n + 1); f[1] = 1; for (int i = 1; i < n; i++) { if (s[i - 1] == '>') { f[i + 1] = 1; } } vector<int> pos; for (int...
ABC293题解ABCDEG
A1234567891011121314151617181920212223#include<bits/stdc++.h>using namespace std;using i64 = long long;int main() { ios::sync_with_stdio(false); cin.tie(nullptr); string s; cin >> s; int n = s.size(); s = ' ' + s; for (int i = 1; i <= n / 2; i++) { swap(s[i * 2], s[i * 2 - 1]); } for (int i = 1; i <= n; i++){ cout << s[i]; } return...
ABC281题解A-F
A12345678910111213141516#include<bits/stdc++.h>using namespace std;using i64 = long long;int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; for (int i = n; i >= 0; i--) { cout << i << '\n'; } return 0;} B12345678910111213141516171819202122232425262728293031323334353637#include<bits/stdc++.h>using namespace std;using i64 = long long;int main() { ...
字典树
像查字典一样,将字符存到树的节点上。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596#include<bits/stdc++.h>#include<array>using namespace std;struct node { array<int, 26> son; bool isend; int prenum; bool repeat;};struct Trie { vector<node> tr; int N; int siz; Trie(int N) : N(N), siz(0) { tr.assign(N,...
SQL_Join
在 SQL 中,JOIN 用于将两个表的数据合并查询,主要有三种常见的连接方式: 1. INNER JOIN(内连接) 只返回两个表中满足连接条件的匹配数据。 不匹配的数据不会出现在结果集中。 📌 示例 1SELECT A.*, B.* FROM A INNER JOIN B ON A.id = B.a_id; 结果: 仅包含 A 和 B 中 id = a_id 匹配的行。 2. LEFT JOIN(左连接) 返回左表的所有数据,即使右表中没有匹配的数据。 右表中没有匹配的数据时,对应的列会填充 NULL。 📌 示例 123SELECT A.*, B.*FROM ALEFT JOIN B ON A.id = B.a_id; 结果: 以 A 表为主,B 中没有匹配的行会显示 NULL。 3. RIGHT JOIN(右连接) 返回右表的所有数据,即使左表中没有匹配的数据。 左表中没有匹配的数据时,对应的列会填充 NULL。 📌 示例 1234SELECT A.*, B.*FROM ARIGHT JOIN B ON A.id =...
死锁活锁和饥饿
死锁死锁是说两个或多个线程等待着一个线程释放资源而无法执行,而等待的线程又不释放资源导致线程阻塞。使得任务无法执行 发生死锁的必要条件(四个必要条件同时满足才会导致死锁): 互斥(Mutual Exclusion):某些资源只能由一个线程独占使用。 持有并等待(Hold and Wait):线程持有某些资源的同时,还在等待其他资源。 不可剥夺(No Preemption):已分配的资源不能被强制剥夺,必须由持有者主动释放。 循环等待(Circular Wait):存在一个线程集合,其中每个线程都在等待另一个线程持有的资源,形成一个闭环。 1234567891011121314151617181920212223242526272829class Lock { static final Object resource1 = new Object(); static final Object resource2 = new Object(); public static void main(String[] args)...
Nginx
Nginx 基本概念Nginx(发音:Engine-X)是一个高性能的 HTTP 服务器和反向代理服务器,同时也可以用于负载均衡和静态资源服务。相比于传统的 Apache 服务器,Nginx 具有高并发、低内存占用和高扩展性的特点,因此被广泛用于 Web 服务器架构。 Nginx 的主要功能: 静态资源服务(如 HTML、CSS、JS、图片等) 反向代理(用于转发请求到后端服务器) 负载均衡(多台服务器均衡处理请求) HTTPS 安全加密(使用 SSL 证书) 动静分离(将静态资源与动态请求分离,提高性能) 1. Nginx 反向代理什么是反向代理?反向代理(Reverse Proxy)指的是 Nginx 作为一个中间服务器,接收客户端请求,并将请求转发给后端的真实服务器,然后再把后端的响应返回给客户端。 这样做的好处: 隐藏后端服务器,提高安全性 支持负载均衡,提升系统性能 缓存静态资源,减少服务器压力 跨域代理,解决前端跨域问题 示例:Nginx 配置反向代理假设你的后端服务运行在 http://localhost:8080,你希望通过...
