LeetCode 刷题基础 -- 模板原型Ⅰ

模板原型 - 基础篇

  • 学习网站
    • 一、进制转换
    • 二、二分查找
      • ① 查找指定元素
      • ② 查找第一个大于等于 x 值的序列下标
      • ③ 查找第一个大于 x 值的序列下标
      • ④ 单峰序列
    • 三、双指针
      • ① 两数之和
      • ② 序列合并
      • ③ 集合求交
      • ④ 集合求并
    • 四、其他高效技巧与算法
      • ① 区间和
      • ② 01 对
      • ③ 左小数
    • 五、数学问题
      • ① 最大公约数
      • ② 最小公倍数
      • ③ 素数
      • ④ 质因子
      • ⑤ 组合数
    • 六、数据结构
      • ① 栈
      • ② 队列
      • ③ 链表
    • 七、深度优先遍历(DFS)
      • ① 01 串
      • ② 子集
      • ③ 全排列
      • ④ 组合
      • ⑤ 有限制的选数Ⅰ
      • ⑥ 有限制的选数Ⅱ
      • ⑦ n皇后
      • ⑧ 迷宫可行路径数
      • ⑨ 无向连通图的块数
    • 八、广度优先搜索(BFS)
      • ① 数字操作
      • ② 矩阵中的块
      • ③ 迷宫最短步数
      • ④ 迷宫最短路径

学习网站

晴问算法训练营

一、进制转换

十进制数 n 转 q 进制

    int n,a[1000],len=0;cin>>n;do{a[len++] = n % q;n /= q;}while(n>0);for(int i= len-1;i>=0;i--){cout<<a[i];}

p进制数 n 转 Q进制

int y = 0,product = 1;   //product 不断乘以p
while( n != 0){y += (n%10) * product;n /= 10;product *= p
}

二、二分查找

① 查找指定元素

//  查找指定元素
int findX(int a[],int l,int r,int x){int mid;while( l<= r){   //注意<= 号mid = (l + r) / 2;if(a[mid]==x){return mid;}else if(a[mid] < x){l = mid + 1;}else{r = mid - 1;}}return -1;
}
int main(){cout<<findX(a,0,n-1,x); //n为数组长度
}

② 查找第一个大于等于 x 值的序列下标

// 查找第一个大于等于 x 值的序列下标
int findX(int a[],int l,int r,int x){int mid;while(l < r){   // 注意< 号mid = (l+r)/2;if(a[mid] >= x){  //r = mid;}else{l = mid + 1;}}return l;  // 注意return l
}

③ 查找第一个大于 x 值的序列下标

int findX(int a[],int l,int r,int x){int mid;while(l<=r){mid = (l+r)/2;if(a[mid]<=x){l = mid + 1;}else{r = mid - 1;}}return l;
}

④ 单峰序列

单峰序列是指,在这个序列中存在一个位置,满足这个位置的左侧(含该位置)是严格递增的、右侧(含该位置)是严格递减的,这个位置被称作峰顶位置。现在给定一个单峰序列,求峰顶位置的下标。

image-20240924133000287

int maxIn = 0;
int mx = 0;
void findX(int a[],int l,int r){if(l>r)return ;int mid = (l+r)/2;if(a[mid]>mx){mx = a[mid];maxIn = mid;}findX(a,mid+1,r);findX(a,l,mid-1);
}

三、双指针

① 两数之和

给定一个严格递增序列A和一个正整数k,在序列A中寻找不同的下标i、j,使得Ai+Aj=k。问有多少对(i,j)同时i<j满足条件。

image-20240924133243742

int i=0,j=n-1,cnt=0;while(i<j){if(a[i]+a[j]==k){cnt++;i++;j--;}else if(a[i]+a[j]<k){i++;}else{j--;}}

② 序列合并

给定两个升序的正整数序列A和B,将它们合并成一个新的升序序列并输出。

int merge() {int i = 0, j = 0, counter = 0;while (i < n && j < m) {if (a[i] < b[j]) {mergedNums[counter++] = a[i++];} else {mergedNums[counter++] = b[j++];}}while (i < n) {mergedNums[counter++] = a[i++];}while (j < m) {mergedNums[counter++] = b[j++];}return counter;
}

③ 集合求交

给定一个包含 n 个正整数的集合 S1,再给定一个包含 m 个正整数的集合 S2,求两个集合的交集。

image-20240924133626143

void getIntersection() {int i = 0, j = 0;while (i < n && j < m) {if (a[i] == b[j]) {intersection.push_back(a[i]);i++, j++;} else if (a[i] < b[j]) {i++;} else {j++;}}
}

④ 集合求并

给定一个包含 n 个正整数的集合S1,再给定一个包含 m 个正整数的集合S2,求两个集合的并集。

image-20240924133722056

void getUnionSet() {int i = 0, j = 0;while (i < n && j < m) {if (a[i] == b[j]) {unionSet.push_back(a[i]);i++, j++;} else if (a[i] < b[j]) {unionSet.push_back(a[i++]);} else {unionSet.push_back(b[j++]);}}while (i < n) {unionSet.push_back(a[i++]);}while (j < m) {unionSet.push_back(b[j++]);}
}

四、其他高效技巧与算法

① 区间和

给定由n个正整数组成的序列A,接下来给出k个查询,每个查询指定两个正整数l、r,计算序列从第l个整数至第r个整数之和,即Al+Al+1+…+Ar。

int main() {int n;cin >> n;vector<int> A(n + 1);vector<int> prefixSum(n + 1, 0);// 读取原数组并构建前缀和数组for (int i = 1; i <= n; ++i) {cin >> A[i];prefixSum[i] = prefixSum[i - 1] + A[i];}int k;cin >> k;for (int i = 0; i < k; ++i) {int l, r;cin >> l >> r;// 计算区间和并输出结果cout << prefixSum[r] - prefixSum[l - 1] << endl;}return 0;
}

② 01 对

给定由n个0或1组成的序列,我们把序列中从左至右(可不连续)存在的0、1称为01对,问在序列中有多少个01对

image-20240924134524016

int main() {int n, x, numZero = 0;scanf("%d", &n);long long result = 0;for (int i = 0; i < n; i++) {scanf("%d", &x);if (x == 1) {result += numZero;} else {numZero++;}}printf("%lld", result);return 0;
}

解析:从左到右 01 对,若看 0 ,不确定后面有多少1。但是若看 1,则必知道前面有多少0,这样就知道有多少 01 对了。

③ 左小数

给定由n个正整数组成的序列,问在序列中有多少个数,满足在它左边的所有数都比它小。

image-20240924135155830

int main() {int n, x, leftMax = 0;scanf("%d", &n);int result = 0;for (int i = 0; i < n; i++) {scanf("%d", &x);if (x > leftMax) {result++;}leftMax = max(leftMax, x);}printf("%d", result);return 0;
}

五、数学问题

① 最大公约数

int gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}
}int main() {int a, b;scanf("%d%d", &a, &b);printf("%d", gcd(a, b));return 0;
}

② 最小公倍数

int gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}
}int main() {int a, b;scanf("%d%d", &a, &b);printf("%d", gcd(a, b));return 0;
}

③ 素数

int gcb(int a,int b){if(b==0){return a;}else{return gcb(b,a%b);}
}int main(){int a,b;cin>>a>>b;if(gcb(a,b)==1){cout<<"Yes";}else{cout<<"No";}
}

补充:打印素数表

void getPrimes(int n) {memset(isPrime, true, sizeof(isPrime));for (int i = 2; i <= n; i++) {if (isPrime[i]) {primes.push_back(i);for (int j = i + i; j <= n; j += i) {isPrime[j] = false;}}}
}int main() {int n;scanf("%d", &n);getPrimes(n);for (int i = 0; i < primes.size(); i++) {printf("%d\n", primes[i]);}return 0;
}

④ 质因子

给定一个正整数n,对n进行质因子分解。

image-20240924191214245

void getPrimes(int n) {memset(isPrime, true, sizeof(isPrime));for (int i = 2; i <= n; i++) {if (isPrime[i]) {primes.push_back(i);for (int j = i + i; j <= n; j += i) {isPrime[j] = false;}}}
}int main() {int n;scanf("%d", &n);getPrimes((int)sqrt(1.0 * n));for (int i = 0; i < primes.size() && n > 1; i++) {int counter = 0;while (n > 1 && n % primes[i] == 0) {counter++;n /= primes[i];}if (counter > 0) {printf("%d %d\n", primes[i], counter);}}if (n > 1) {printf("%d 1", n);}return 0;
}

⑤ 组合数

image-20240924191626523

#include <cstdio>
typedef long long LL;LL C(LL n, LL m) {LL ans = 1;for (LL i = 1; i <= m; i++) {ans = ans * (n - m + i) / i;}return ans;
}int main() {LL n, m;scanf("%lld%lld", &n, &m);printf("%lld", C(n, m));return 0;
}

六、数据结构

① 栈

现有一个空栈s和一个正整数n,将1,2,3,…,n依次入栈,期间任意时刻出栈。然后给定一个出栈序列,问其是否是一个合法的出栈序列。

image-20240924192048236

int main() {int n;scanf("%d", &n);stack<int> s;int x, nowMax = 0;bool isValid = true;for (int i = 0; i < n; i++) {scanf("%d", &x);if (x > nowMax) {for (int j = nowMax + 1; j <= x; j++) {s.push(j);}nowMax = x;}if (s.top() != x) {isValid = false;break;} else {s.pop();}}printf(isValid ? "Yes" : "No");return 0;
}

② 队列

约瑟夫环:假设n个人按编号顺时针从小到大排成一圈(编号为从1到n)。接着约定一个正整数k,从编号为1的人开始顺时针报数(编号为1的人报数1,编号为2的人报数2……),报到k的人离开圈子,然后他的下一个人继续从1开始报数,以此类推,直到圈子里只剩下一个人。

image-20240924192230935

int main(){int n,k,m;cin>>n>>m;queue<int> q;for(int i=1;i<=n;i++){q.push(i);}int cnt = 0;while(!q.empty()){int num = q.front();cnt++;if(cnt % m ==0){cout<<q.front();q.pop();if(q.size()>=1){cout<<" ";}}else{q.pop();q.push(num);}}
}

③ 链表

private:struct ListNode{int val;ListNode* next;ListNode():val(0),next(NULL){}ListNode(int val):val(val),next(NULL){}ListNode(int val,ListNode* next):val(val),next(NULL){}};int len;ListNode* dummyhead; //链表虚拟头结点public:MyLinkedList() {len = 0;dummyhead = new ListNode();}int get(int index) {if(index<0||index>len-1) return -1;ListNode* p = dummyhead->next;while(index--){p = p ->next;}return p->val;}void addAtHead(int val) {ListNode* p = new ListNode(val);p->next = dummyhead->next;dummyhead->next = p;len++;}void addAtTail(int val) {ListNode* p = new ListNode(val),*cur=dummyhead;while(cur->next) cur = cur->next;cur->next = p;len++;}void addAtIndex(int index, int val) {if(index<=0) addAtHead(val);else if(index==len) addAtTail(val);else{ListNode* p = new ListNode(val),*pre = dummyhead;while(index--) pre = pre->next;p->next = pre->next;pre->next = p;len++;}}void deleteAtIndex(int index) {if(index<0||index>len-1) return;ListNode* pre = dummyhead,*p = NULL;while(index--) pre = pre->next;p = pre->next;pre->next = p->next;delete p;len--;}
};// 创建单链表
ListNode *head = new ListNode,*p = head;for(int i=1;i<=n;i++){scanf("%d",&v);p->next = new ListNode(v);p = p->next;}//头插法
p = q ->next;
q->next = H->next;
H->next = q;
q = p;//尾插法
LNode *rear = H->next;
while(){q = new ListNode(v);rear->next = q;rear = q;
}
rear->next = NULL;//单链表法二
struct Node {int data, next;
} nodes[MAXN];

七、深度优先遍历(DFS)

① 01 串

在一个长度为n的数组中填写0或者1,输出所有可能的结果。

image-20240330203136805

vector<int> temp;
vector<vector<int> > result;
void DFS(int k){if(k==n) {result.push_back(temp);return;}temp.push_back(0);DFS(k+1);temp.pop_back();temp.push_back(1);DFS(k+1);temp.pop_back();
}

② 子集

给定一个正整数n,假设序列S=[1,2,3,…,n],求S的所有子集。

image-20240330203234392

void DFS(int idx) {if (idx == n + 1) {result.push_back(temp);return;}temp.push_back(idx);DFS(idx + 1);temp.pop_back();DFS(idx + 1);
}bool cmp(vector<int> a, vector<int> b) { if (a.size() != b.size()) {return a.size() < b.size();} else {return a < b;}
}

③ 全排列

给定一个正整数n,假设序列S=[1,2,3,…,n],求S的全排列。

image-20240330203331436

bool used[MAXN] = {false};void DFS(int idx) {if (idx == n + 1) {result.push_back(temp);return;}for (int i = 1; i <= n; i++) {if (!used[i]) {temp.push_back(i);used[i] = true;DFS(idx + 1);used[i] = false;temp.pop_back();}}
}

④ 组合

给定两个正整数n、k,假设序列S=[1,2,3,…,n],求从S中任选k个的所有可能结果。

image-20240330203510567

void DFS(int idx) {if (temp.size() == k) {   result.push_back(temp);return;}if (idx == n + 1) {return;}temp.push_back(idx);DFS(idx + 1);temp.pop_back();DFS(idx + 1);
}

⑤ 有限制的选数Ⅰ

给定n个互不相同的正整数,从中选择若干个数(每个数只能选一次),使得这些数之和为定值K。求满足条件的方案数。

image-20240330204302160

void DFS(int idx, int nowSum) {if (idx == n + 1) {if (nowSum == k) {ans++;}return;}if (nowSum > k) {return;}DFS(idx + 1, nowSum + a[idx]);DFS(idx + 1, nowSum);
}

⑥ 有限制的选数Ⅱ

给定n个互不相同的正整数,从中选择若干个数(每个数可以选任意次),使得这些数之和为定值K。求满足条件的方案数。

image-20240330204203107

void DFS(int idx, int nowSum) {  //k为目标值if (idx == n + 1) {if (nowSum == k) {ans++;}return;}for (int i = 0; i <= (k - nowSum) / a[idx]; i++) {DFS(idx + 1, nowSum + i * a[idx]);}
}

⑦ n皇后

bool vis_col[14],vis_l[30],vis_r[30];  //col 列 ,l左对角线,r右对角线
int n,ans;
void dfs(int row){  //行if(row==n){ans++;return;}for(int i=0;i<n;i++){if(!vis_col[i]&&!vis_l[i-row+n]&&!vis_r[i+row]){vis_col[i] = vis_l[i-row+n] = vis_r[i+row] = 1;dfs(row+1);vis_col[i] = vis_l[i-row+n] = vis_r[i+row] = 0;}}
}

⑧ 迷宫可行路径数

现有一个n∗m大小的迷宫,其中1表示不可通过的墙壁,0表示平地。每次移动只能向上下左右移动一格(不允许移动到曾经经过的位置),且只能移动到平地上。求从迷宫左上角到右下角的所有可行路径的条数。

image-20240924195453975

int De[][2] = {{0,1},{0,-1},{1,0},{-1,0}};
int mp[5][5];
bool vis[5][5] = {false};
int cnt = 0;
int n,m;
bool isVilid(int x,int y){if(x<0||y<0||x>=n||y>=m||vis[x][y]==true||mp[x][y]==1){return false;}else{return true;}
}void DFS(int x,int y){if(x==n-1&&y==m-1){cnt++;return;}vis[x][y] = true;for(int i=0;i<5;i++){int next_x = x + De[i][0];int next_y = y + De[i][1];if(isVilid(next_x,next_y)){DFS(next_x,next_y);}}vis[x][y] = false;
}int main(){cin>>n>>m;for(int i=0;i<n;i++){for(int j=0;j<m;j++){cin>>mp[i][j];}}DFS(0,0);cout<<cnt;}

⑨ 无向连通图的块数

tmp43BE

#include <cstdio>
#include <vector>
using namespace std;const int MAXN = 100;
vector<int> G[MAXN];
bool vis[MAXN];void DFS(int u) {vis[u] = true;for (int i = 0; i < G[u].size(); i++) {int v = G[u][i];if (!vis[v]) {DFS(v);}}
}int main() {memset(vis, false, sizeof(vis));int n, m, u, v;scanf("%d%d", &n, &m);for (int i = 0; i < m; i++) {scanf("%d%d", &u, &v);G[u].push_back(v);G[v].push_back(u);}int blockCount = 0;for (int i = 0; i < n; i++) {if (!vis[i]) {DFS(i);blockCount++;}}printf("%d", blockCount);return 0;
}

八、广度优先搜索(BFS)

① 数字操作

从整数1开始,每轮操作可以选择将上轮结果加1或乘2。问至少需要多少轮操作才能达到指定整数 n。

const int MAXN = 100000;
bool inQueue[MAXN + 1] = {false};int getStep(int n) {int step = 0;queue<int> q;q.push(1);while (true) {int cnt = q.size();for (int i = 0; i < cnt; i++) {int front = q.front();q.pop();if (front == n) {return step;}inQueue[front] = true;if (front * 2 <= n && !inQueue[front * 2]) {q.push(front * 2);}if (front + 1 <= n && !inQueue[front + 1]) {q.push(front + 1);}}step++;}
}

② 矩阵中的块

现有一个n∗m的矩阵,矩阵中的元素为01。然后进行如下定义:

  1. 位置(x,y)与其上下左右四个位置(x,y+1)、(x,y−1)、(x+1,y)、(x−1,y)是相邻的;
  2. 如果位置(x1,y1)与位置(x2,y2)相邻,且位置(x2,y2)与位置(x3,y3)相邻,那么称位置(x1,y1)与位置(x3,y3)也相邻;
  3. 称个数尽可能多的相邻的1构成一个“块”。

求给定的矩阵中“块”的个数。

int n, m, matrix[MAXN][MAXN];
bool inQueue[MAXN][MAXN] = {false};const int MAXD = 4;
int dx[MAXD] = {0, 0, 1, -1};
int dy[MAXD] = {1, -1, 0, 0};bool canVisit(int x, int y) {return x >= 0 && x < n && y >= 0 && y < m && matrix[x][y] == 1 && !inQueue[x][y];
}void BFS(int x, int y) {queue<Position> q;q.push(Position(x, y));inQueue[x][y] = true;while (!q.empty()) {Position front = q.front();q.pop();for (int i = 0; i < MAXD; i++) {int nextX = front.first + dx[i];int nextY = front.second + dy[i];if (canVisit(nextX, nextY)) {inQueue[nextX][nextY] = true;q.push(Position(nextX, nextY));}}}
}

③ 迷宫最短步数

现有一个n∗m大小的迷宫,其中1表示不可通过的墙壁,0表示平地。每次移动只能向上下左右移动一格,且只能移动到平地上。求从迷宫左上角到右下角的最小步数。

bool canVisit(int x, int y) {return x >= 0 && x < n && y >= 0 && y < m && maze[x][y] == 0 && !inQueue[x][y];
}int BFS(int x, int y) {queue<Position> q;q.push(Position(x, y));inQueue[x][y] = true;int step = 0;while (!q.empty()) {int cnt = q.size();while (cnt--) {Position front = q.front();q.pop();if (front.first == n - 1 && front.second == m - 1) {return step;}for (int i = 0; i < MAXD; i++) {int nextX = front.first + dx[i];int nextY = front.second + dy[i];if (canVisit(nextX, nextY)) {inQueue[nextX][nextY] = true;q.push(Position(nextX, nextY));}}}step++;}return -1;
}

④ 迷宫最短路径

现有一个n∗m大小的迷宫,其中1表示不可通过的墙壁,0表示平地。每次移动只能向上下左右移动一格,且只能移动到平地上。假设左上角坐标是(1,1),行数增加的方向为x增长的方向,列数增加的方向为y增长的方向,求从迷宫左上角到右下角的最少步数的路径。

typedef pair<int, int> Position;const int MAXN = 100;
int n, m, maze[MAXN][MAXN];
bool inQueue[MAXN][MAXN] = {false};
Position pre[MAXN][MAXN];const int MAXD = 4;
int dx[MAXD] = {0, 0, 1, -1};
int dy[MAXD] = {1, -1, 0, 0};bool canVisit(int x, int y) {return x >= 0 && x < n && y >= 0 && y < m && maze[x][y] == 0 && !inQueue[x][y];
}void BFS(int x, int y) {queue<Position> q;q.push(Position(x, y));inQueue[x][y] = true;while (!q.empty()) {Position front = q.front();q.pop();if (front.first == n - 1 && front.second == m - 1) {return;}for (int i = 0; i < MAXD; i++) {int nextX = front.first + dx[i];int nextY = front.second + dy[i];if (canVisit(nextX, nextY)) {pre[nextX][nextY] = Position(front.first, front.second);inQueue[nextX][nextY] = true;q.push(Position(nextX, nextY));}}}
}void printPath(Position p) {Position prePosition = pre[p.first][p.second];if (prePosition == Position(-1, -1)) {printf("%d %d\n", p.first + 1, p.second + 1);return;}printPath(prePosition);printf("%d %d\n", p.first + 1, p.second + 1);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/442627.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BLE MESH学习1-基于沁恒CH582学习

BLE MESH学习1-基于沁恒CH582学习 一、BLE mesh说明 mesh组网可以实现相比点对点模式更远的距离、更灵活的网络形式、更可靠的连接和更多的设备加入。BLE mesh在IoT中的传感器和控制具有重要意义。我的目的也是IoT领域&#xff0c;实现自己的传感器读取、开关控制等类似米家智…

知识改变命运 数据结构【java对象的比较】

0&#xff1a;前言 在基本数据类型中&#xff0c;我们可以直接使用号比较是否相等&#xff0c;还记的学堆哪里时候&#xff0c;插入一个数据&#xff0c;就会与其他数据进行比较&#xff0c;当时我们传入的是Integer类型&#xff0c;在Integer类里面已经实现了compare。 如果…

西门子S7-1200博途软件项目的下载

S7-1200的CPU本体上集成了PROFINET通信口&#xff0c;通过这个通信口可以实现CPU与编程设备的通信。 此外&#xff0c;S7-1200 可以通过连接CM1243-5扩展模块&#xff0c;然后电脑通过PC ADAPTER USB A2电缆、或者电脑上的CP卡&#xff08;例如CP5612&#xff09;通过PROFIBUS…

手写mybatis之SQL执行器的定义和实现

前言 所有系统的设计和实现&#xff0c;核心都在于如何解耦&#xff0c;如果解耦不清晰最后直接导致的就是再继续迭代功能时&#xff0c;会让整个系统的实现越来越臃肿&#xff0c;稳定性越来越差。而关于解耦的实践在各类框架的源码中都有非常不错的设计实现&#xff0c;所以阅…

陪伴系统,会成为女性向游戏的下一个争夺点吗?

乙游提供给女性玩家的只有恋爱感吗&#xff1f; 一般来说&#xff0c;对于乙女游戏的概括常常以为玩家提供“恋爱陪伴感”为主&#xff0c;恋爱很好理解&#xff0c;通过与多位男主角的剧情互动来模拟在真实恋爱中的情感交互&#xff0c;当下乙游都将重点放在了营造恋爱感上。…

55页可编辑PPT | 制造企业数字化转型顶层规划案例

基于集团的战略和运营特点&#xff0c;数字化转型应如何考虑&#xff1f; 在集团的战略和运营特点基础上进行数字化转型&#xff0c;需要实现业务多元化&#xff0c;整合资源和流程&#xff0c;推动国际化拓展&#xff0c;实施差异化战略&#xff0c;并通过数据驱动决策&#…

Vue工程化结构环境安装及搭建教程 : 之nvm

vue需要的环境&#xff1a; node.js : Node.js和Vue.js通常会一起使用。Node.js作为后端服务器&#xff0c;处理服务器端的逻辑和数据访问&#xff0c;而Vue.js则负责前端用户界面的构建和交互。通过Ajax通信&#xff0c;Vue.js应用程序向Node.js服务器发送请求&#xff0c;并…

【Ubuntu】git

文章目录 1.配置SSH key2. 基础知识操作命令1分支branch 如果对git命令使用不熟悉&#xff0c;推荐一个非常棒的git在线练习工具 Learn Git Branching。 https://m.runoob.com/git/git-basic-operations.html 1.配置SSH key ssh-keygen -t rsa -C "YOUR EMAIL"完成…

PDF无法导出中文

font/SIMSUN.TTC with Identity-H is not recognized. 查看BaseFont源码发现".ttc," 改为"SIMSUN.TTC,a"提示数字转换异常 改为"SIMSUN.TTC,11"提示数字索引必须介于0和1之间 改为0或1结果正常 BaseFont baseFont BaseFont.createFont("/U…

迎接国庆旅游热潮,火山引擎数据飞轮助力景区数智化升级

随着人们生活水平的提高和旅游消费观念的转变&#xff0c;国庆假期成为人们出行旅游的黄金时段。同程旅行发布的报告显示&#xff0c;北京、杭州、重庆、上海、南京、成都等城市仍是 “十一” 假期国内热门的目的地&#xff0c;而一些新兴的宝藏旅游目的地如新疆阿勒泰、云南迪…

四.python核心语法

目录 1.序列 1.1. 索引 1.2. 切片 1.3. 总结 2.加法和乘法 2.1. 加法 2.2. 乘法 3.常用函数 3.1.sum()函数 3.2.max()函数和min()函数 3.3.len()函数 4. list 列表 [ ] 基本操作 4.1. 列表的定义 4.2. 列表的创建&#xff08;list()函数&#xff09; 4.3. 列表的…

RabbitMQ概述

什么是MQ MQ (message queue)消息队列 MQ从字⾯意思上看,本质是个队列,FIFO先⼊先出&#xff0c;只不过队列中存放的内容是消息(message).消息可以⾮常简单,⽐如只包含⽂本字符串,JSON等,也可以很复杂,⽐如内嵌对象 RabbitMQ是MQ的一种实现,是Rabbit 企业下的⼀个消息队列产…

Python 如何使用 scikit-learn 进行模型训练

如何使用 scikit-learn 进行模型训练 一、简介 在现代的数据科学和机器学习领域&#xff0c;Python 已经成为最流行的编程语言之一。而其中最流行的机器学习库之一就是 scikit-learn。scikit-learn 提供了许多方便的工具和函数来实现常见的机器学习任务&#xff0c;包括数据预…

数据分析:宏基因组群落TOPOSCORE拓扑结构打分

文章目录 介绍数据TOPOSCORE算法SCORE计算TOPOSCORE实操tp_helper.R导入数据生存分析Fisher精确检验聚类分析SIG定义Toposcoring 分数计算Akkermansia muciniphila的考虑TOPOSCORE的验证总结系统信息介绍 研究背景:肠道微生物群对癌症患者对免疫检查点抑制剂(ICIs)的临床反…

笔记整理—linux进程部分(9)互斥锁

互斥锁也叫互斥量&#xff0c;可以看作一种特殊的信号量。信号量可以>0&#xff0c;大家可以排队使用信号量&#xff0c;互斥锁只有0、1&#xff0c;主要实现关键段保护&#xff0c;只能在某一时间给某一任务去调用这段资源&#xff0c;这段内容用之前上锁&#xff0c;用完时…

【stm32】寄存器(stm32技术手册下载链接)

1、资料下载 RM0008_STM32F101xx,STM32F102xx,STM32F103xx,STM32F105xx和STM32F107xx单片机参考手册 | STMCU中文官网 2、代码 设置PB7 //设置PB7 #define SDA_IN() {GPIOB->CRL&0X0FFFFFFF;GPIOB->CRL|(u32)8<<28;} #define SDA_OUT() {GPIOB->…

STM32编码器接口

一、概述 1、Encoder Interface 编码器接口概念 编码器接口可接收增量&#xff08;正交&#xff09;编码器的信号&#xff0c;根据编码器旋转产生的正交信号脉冲&#xff0c;自动控制CNT自增或自减&#xff0c;从而指示编码器的位置、旋转方向和旋转速度每个高级定时器和通用…

基于VUE+uniapp小程序的物业管理系统社区小区物业报修收费投诉管理系统

&#xff01;&#xff01;&#xff01;页面底部,文章结尾,加我好友,获取计算机毕设开发资料 目录 一、引言 二、相关技术介绍 三、系统需求分析 四、系统设计 五、关键技术实现 六、测试与优化 七、总结与展望 一、引言 当前物业管理存在诸多问题&#xff0c;如报修响应…

【设计模式】设计模式介绍和常见设计模式代码示例

文章目录 设计模式分类创建型模式结构型模式行为型模式 设计模式详解单例模式&#xff08;Singleton Pattern&#xff09;懒汉模式饿汉模式 工厂模式&#xff08;Factory Pattern&#xff09;简单工厂模式工厂方法模式抽象工厂模式 装饰模式&#xff08;Decorator Pattern&…

C#多线程基本使用和探讨

线程是并发编程的基础概念之一。在现代应用程序中&#xff0c;我们通常需要执行多个任务并行处理&#xff0c;以提高性能。C# 提供了多种并发编程工具&#xff0c;如Thread、Task、异步编程和Parallel等。 Thread 类 Thread 类是最基本的线程实现方法。使用Thread类&#xff0…