Go光速入门
Go语言基本语法与使用一、变量 变量声明Go中的变量声明和Java中有所不同,主要有一下几种格式 标准格式 1var 变量名 变量类型 以关键字var开头,最后不用加分号 批量声明 如果我们要声明多个变量,一个一个的声明会比较繁琐,这时就有了批量声明 12345var( 变量1 变量类型 变量2 变量类型 ......) 变量初始化Go语言在声明变量时,自动对变量对应的内存区域进行初始化工作。也就是说,如果我们声明了变量而没有赋值,那么**编译器**会给变量赋各个类型对应的零值。和Java不同,Java只会对成员变量和常量赋默认零值,对于局部变量则会报错 标准格式 1var 变量名 变量类型 = 表达式 类型推导 由于Go是强类型语言,其实我们可以通过给变量赋的值来推导出变量的类型,这就是所谓的类型推导,于是就有了我们下面的这种写法: 1var 变量名 =...
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)...
