【算法基础】数据结构

news2024/12/23 16:31:50

链表 

单链表

826. 单链表 - AcWing题库

cb1763df218045ceaf2f74a292a51b8c.jpg

#include<bits/stdc++.h>
using namespace std;
const int N =100010;
int m;
int e[N],ne[N];//记录数据和下一结点坐标
int head,idx;//当前指向的结点 
void init()
{
	head=-1;
	idx=0;
}
void addtohead(int x)
{
	e[idx]=x;
	ne[idx]=head;
	head=idx;
	idx++;
}
void remove(int x)
{
	ne[x]=ne[ne[x]];
}
void add(int k,int x)
{
	e[idx]=x;
	ne[idx]=ne[k];
	ne[k]=idx;
	idx++;
}
signed main()
{
    scanf("%d",&m);
    init();
	while(m--)
	{
		char op;
		scanf("%s",&op);
		if(op=='H')//向链表头插入一个数x 
		{
			int x;
			scanf("%d",&x);
			addtohead(x);	
		}
        //第k个插入的数的对应坐标是k-1
		if(op=='D')//删除第 k个插入的数后面的数(当 k为 0时,表示删除头结点)
		{
			int x;
			scanf("%d",&x);
			if(!x) head=ne[head];//如果是删除头结点 ,移动头结点head 
			else remove(x-1);
		}	
		if(op=='I')//第 k个插入的数后面插入一个数 x
		{
			int k,x;
			scanf("%d %d",&k,&x);
			add(k-1,x);
		}
	}
	for(int i=head;i!=-1;i=ne[i]) cout<<e[i]<<" ";
    return 0;
}

双链表

827. 双链表 - AcWing题库

2bce8f5843ca417c89b4ac76348b08f2.jpg

#include<bits/stdc++.h>
using namespace std;
const int N =100010;
int m;
int e[N],l[N],r[N],idx;
void init()
{
	r[0]=1,l[1]=0;
	idx=2;
}
void add(int k,int x)
{
	e[idx]=x;
	l[idx]=k;
	r[idx]=r[k];
	l[r[k]]=idx;
	r[k]=idx++;
}
void remove(int k)
{
	r[l[k]]=r[k];
	l[r[k]]=l[k];
}
signed main()
{//0,1代表头尾 
	cin>>m;
	init();
	while(m--)
	{
		string op;
		cin>>op;
		if(op=="L")
		{
			int x;
			cin>>x; 
			add(0,x);
		}
		if(op=="R")
		{
			int x;
			cin>>x;
			add(l[1],x);
		}
		if(op=="D")
		{
			int k;
			cin>>k;
			remove(k+1);
		}
		if(op=="IL")
		{
			int k,x;
			cin>>k>>x;
			add(l[k+1],x);
		}
		if(op=="IR")
		{
			int k,x;
			cin>>k>>x;
			add(k+1,x);
		}
	}
	for(int i=r[0];i!=1;i=r[i]) cout<<e[i]<<" ";
    return 0;
}

828. 模拟栈 - AcWing题库

3a742deef2de4c9c896302baa74502a2.jpg

#include<bits/stdc++.h>
using namespace std;
const int N =100010;
int m;
int stk[N],tt;
void init()
{
	tt=0;
	memset(stk,0,sizeof(stk));
}
signed main()
{
    cin>>m;
    init();
    while(m--)
    {
    	string op;
    	cin>>op;
    	if(op=="push")
    	{
    		int x;
    		cin>>x;
    		stk[++tt]=x;
		}
		if(op=="pop")
		{
			tt--;
		}
		if(op=="empty")
		{
			if(tt>0) cout<<"NO"<<'\n';
			else cout<<"YES"<<'\n';
		}
		if(op=="query")
		{
			cout<<stk[tt]<<'\n';
		}
	}
    return 0;
}

3302. 表达式求值 - AcWing题库

遍历输入的操作

如果是数字就存入num的堆栈 (同时注意123,2123这种长数字要一次性存入)

如果是(  直接存入op的堆栈

如果是  )就一直运算,直到遇到(

如果是操作符(如+-*/),一直与栈顶比较运算符优先级,如果栈里的运算符优先级大就运算,直到目前这个运算符优先级小为止。

运算是从num里弹出两个数,从op里弹出一个运算符,直接运算。

如果最后遍历完了,栈内还有运算符就算完,最后num栈顶的元素就是最后的运算结果

#include <iostream>
#include <string>
#include <stack>
#include <unordered_map>

using namespace std;

stack<char> op;
stack<int> num;
unordered_map<char, int> pr = {{'+', 1}, {'-', 1}, {'*', 2}, {'/', 2}};

void eval()
{
    int b = num.top(); num.pop();
    int a = num.top(); num.pop();
    char c = op.top(); op.pop();

    int x;
    if(c == '+') x = a + b;
    else if(c == '-') x = a - b;
    else if(c == '*') x = a * b;
    else x = a / b;

    num.push(x);
}

int main()
{
    string s;
    cin >> s;

    for(int i = 0; i < s.size(); i++)
    {
        char c = s[i];
        if(isdigit(c))
        {
            int x = 0, j = i;
            while(j < s.size() && isdigit(s[j])) x = 10 * x + s[j++] - '0';
            i = j - 1;
            num.push(x);
        }
        else if(c == '(') op.push(c);
        else if(c == ')')
        {
            while(op.size() && op.top() != '(') eval();
            op.pop();
        }
        else
        {
            while(op.size() && pr[op.top()] >= pr[c]) eval();
            op.push(c);
        }
    }
    while(op.size()) eval();
    cout << num.top() << endl;

    return 0;
}

队列

829. 模拟队列 - AcWing题库

#include<bits/stdc++.h>
using namespace std;
//头删尾插 
const int N=1e5+10; 
int q[N],hh,tt=-1;
int m;
signed main()
{
	cin>>m;
	while(m--)
	{
		string op;
		cin>>op;
		if(op=="push")
		{
			int x;
			cin>>x;
			q[++tt]=x;
		}else if(op=="pop"){
			hh++;
		}else if(op=="empty"){
			if(hh<=tt) cout<<"NO"<<endl;
			else cout<<"YES"<<endl;
		}else if(op=="query"){
			cout<<q[hh]<<endl;
		}
	}
	return 0;
}

 单调栈

830. 单调栈 - AcWing题库

 单调递增或递减的栈

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10; 
int stk[N],tt;
int n;
signed main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		int x;
		cin>>x;
		while(tt&&stk[tt]>=x) tt--;
		if(tt) cout<<stk[tt]<<" ";
		else cout<<"-1 ";
		stk[++tt]=x;	
	}
	
	return 0;
}

单调队列

154. 滑动窗口 - AcWing题库

数组a存数值,数组q模拟队列。

保持滑动窗口的大小为k。同时保持单调队列,也就是如果队头的数比进来的数大就丢出去,这样保持队头是当前这个区间内的最小值。

#include<iostream>
using namespace std;
const int N = 1e6 + 10;
int n,k,q[N],a[N];//q[N]存的是数组下标
int main()
{
    int tt=-1,hh=0;//hh队列头 tt队列尾
    cin>>n>>k;
    for(int i=0;i<n;i++) cin>>a[i];
    for(int i=0;i<n;i++)
    {
    	if(hh<=tt&&i>q[hh]+k-1) hh++;
    	while(hh<=tt&&a[i]<=a[q[tt]]) tt--;
    	q[++tt]=i;
    	if(i>=k-1) cout<<a[q[hh]]<<" ";
	}
	cout<<endl;
	hh=0,tt=-1;
	for(int i=0;i<n;i++)
	{
		if(hh<=tt&&i>q[hh]+k-1) hh++;
		while(hh<=tt&&a[i]>=a[q[tt]]) tt--;
		q[++tt]=i;
		if(i>=k-1) cout<<a[q[hh]]<<" ";
	}
    return 0;
}

 KMP

831. KMP字符串 - AcWing题库

这篇写得很好:KMP算法详解-彻底清楚了(转载+部分原创) - sofu6 - 博客园 (cnblogs.com)  

#include<iostream>
using namespace std;
const int N=100010,M=1000010;
char q[N],s[M];
int ne[N];//保存next数组
int main()
{
    int n,m;
    cin>>n>>q+1>>m>>s+1;//下标均从1开始
    ne[1]=0;
    for(int i=2,j=0;i<=n;i++)
    //j表示匹配成功的长度,i表示q数组中的下标,因为q数组的下标是从1开始的,只有1个时,一定为0,所以i从2开始
    {
        while(j&&q[i]!=q[j+1]) j=ne[j];
        //如果不行可以换到next数组
        if(q[i]==q[j+1]) j++;
        //成功了就加1
        ne[i]=j;
        //对应其下标
    }
    //j表示匹配成功的长度,因为刚开始还未开始匹配,所以长度为0
    for(int i=1,j=0;i<=m;i++)
    {
        while(j&&s[i]!=q[j+1]) j=ne[j];
        //如果匹配不成功,则换到j对应的next数组中的值
        if(s[i]==q[j+1]) j++;
        //匹配成功了,那么j就加1,继续后面的匹配
        if(j==n)//如果长度等于n了,说明已经完全匹配上去了
        {
            printf("%d ",i-j);
            //因为题目中的下标从0开始,所以i-j不用+1;
            j=ne[j];
            //为了观察其后续是否还能跟S数组后面的数配对成功
        }
    }
    return 0;
}

理解后自己a的版本 

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
char p[N],s[N];
int m,n;
int ne[N];
signed main()
{
	cin>>n>>p+1>>m>>s+1;
	for(int i=2,j=0;i<=n;i++)
	{
		while(j&&p[i]!=p[j+1]) j=ne[j];
		if(p[i]==p[j+1]) j++;
		ne[i]=j; 
	}
	for(int i=1,j=0;i<=m;i++)
	{
		while(j&&s[i]!=p[j+1]) j=ne[j];
		if(s[i]==p[j+1]) j++;
		if(j==n)
		{
			cout<<i-j<<" ";
			j=ne[j];
		}
	}
	
	return 0;
}

Trie树

835. Trie字符串统计 - AcWing题库

Trie树:用来高效的存储和字符串集合的数据结构。 

 

#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int son[N][26], cnt[N], idx; //下标是0的点,既是根节点,又是空节点
char str[N];
void insert(char str[])
{
    int p=0;
    for(int i=0;str[i]!='\0';++i)
    {
        int u=str[i]-'a';
        if(!son[p][u]) son[p][u]=++idx;
        p=son[p][u];
    }
    cnt[p]++;
}
int query(char str[])
{
    int p=0;
    for(int i=0;str[i];i++)
    {
        int u=str[i]-'a';
        if(!son[p][u]) return 0;
        p=son[p][u];
    }
    return cnt[p];
}
signed main() 
{
    int m;cin>>m;
    while(m--)
    {
        char c;
        cin>>c>>str;
        if(c=='I') insert(str);
        else {
            cout<<query(str)<<endl;
        }
    }
    return 0;
}

143. 最大异或对 - AcWing题库

异或,不进位的加法。

先转化成二进制,进行异或运算后,再转化。

比如3^5=6

3的二进制是011,5的二进制是101

101

011

110(结果),对应十进制里的6 

#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int son[N*31][2];
int idx,n;
void insert(int x)
{
	int p=0;
	for(int i=31;i>=0;i--)
	{
		int u=x>>i&1;
		if(!son[p][u]) son[p][u]=++idx;
		p=son[p][u];
	}
}
int query(int x)
{
	int p=0,ret=0;
	for(int i=31;i>=0;i--)
	{
		int u=x>>i&1;
		if(son[p][!u])
		{
			p=son[p][!u];
			ret=ret*2+!u;
		}else{
			p=son[p][u];
			ret=ret*2+u;
		}
	}
	return ret^x;
}
signed main()
{
    cin>>n;
    int maxn=0;
    while(n--)
    {
    	int x;
    	cin>>x;
    	insert(x);
    	maxn=max(maxn,query(x));
	}
	cout<<maxn;
	return 0;
}

并查集

并查集适于以下操作:

1.合并两个集合

2.查询两个元素是否同一个集合

合并集合 

836. 合并集合 - AcWing题库

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int p[N];
int find(int x)
{
	if(p[x]!=x) p[x]=find(p[x]);
	return p[x];
}
void merge(int a,int b)
{
	int pa=find(a);int pb=find(b);
	if(pa!=pb)
	{
		p[pa]=pb;
	}
}
void query(int a,int b)
{
	int pa=find(a);
	int pb=find(b);
	if(pa==pb) cout<<"Yes"<<endl;
	else cout<<"No"<<endl;
}
signed main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++) p[i]=i; 
    while(m--)
    {
    	char op;
    	cin>>op;
    	int a,b;
    	cin>>a>>b;
    	if(op=='M') merge(a,b);
    	if(op=='Q') query(a,b);
	}
	return 0;
}

 连通块中点的数量

837. 连通块中点的数量 - AcWing题库

 用集合维护连通块。

在点之间连边相当于合并两个集合。

额外需要注意的操作就只有统计每个集合中的元素个数,开一个s数组记录就好。

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int p[N],s[N];//只保证根节点的size有意义 
int find(int x)
{
	if(p[x]!=x) p[x]=find(p[x]);
	return p[x];
}
void merge(int a,int b)
{
	int pa=find(a);int pb=find(b);
	if(pa!=pb)
	{
		p[pa]=pb;
		s[pb]+=s[pa]; 
	}
}
void query(int a,int b)
{
	int pa=find(a);
	int pb=find(b);
	if(pa==pb) cout<<"Yes"<<endl;
	else cout<<"No"<<endl;
}
signed main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++) p[i]=i,s[i]=1; 
    while(m--)
    {
    	char op[5];
    	cin>>op;
    	int a,b;
    	if(op[0]=='C') cin>>a>>b,merge(a,b);
    	if(op[1]=='1') cin>>a>>b,query(a,b);
    	if(op[1]=='2') cin>>a,cout<<s[find(a)]<<endl;
	}
	return 0;
}

食物链

240. 食物链 - AcWing题库

 有问题可以看这个题解的评论,解答得很漂亮!!

#include<bits/stdc++.h>
using namespace std;
const int N=5e4+10;
int n,m;
int p[N],d[N];
int res;
int find(int x)
{
	if(p[x]!=x) 
	{
		int t = find(p[x]);//这一步是直接找到根
        d[x] += d[p[x]];
        p[x] = t;
	}
	return p[x];
}
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++) p[i]=i;
	while(m--)
	{
		int t,x,y;
		cin>>t>>x>>y;
		
		if(x>n||y>n) res++;	
		else{
			
			int px=find(x),py=find(y);
			if(t==1)//同类的 
			{
				if(px==py&&(d[x]-d[y])%3!=0) res++;//如果在一个集合内但不满足同级的条件
				else if(px!=py)
				{
					p[px]=py;
					d[px]=d[y]-d[x];	
				} 
			}else if(t==2){
				if(px==py&&(d[x]-d[y]-1)%3!=0) res++;
				else if(px!=py)
				{
					p[px]=py;
					d[px]=d[y]+1-d[x];
				}
				
			}
		}
	}	
	cout<<res;
	return 0;
}

堆排序

838. 堆排序 - AcWing题库

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m,a[N],r;
void down(int u)
{
	int t=u;//标记最小的点
	if(2*u<=r&&a[2*u]<a[t]) t=2*u; 
	if(2*u+1<=r&&a[2*u+1]<a[t]) t=2*u+1;
	if(u!=t)
	{
		swap(a[u],a[t]);
		down(t);
	}
}
signed main()
{
	cin>>n>>m;
	r=n;
	for(int i=1;i<=n;i++) cin>>a[i];
	//建堆
	for(int i=n/2;i>=1;i--) down(i); 
	while(m--)
	{
		cout<<a[1]<<" ";
		a[1]=a[r--];
		/*swap(a[1],a[size]);
		size--;*/
		down(1);
	}
	
	return 0;
}

哈希表

哈希表根据处理哈希冲突的方式,又可以分为开放寻址法拉链法

模拟散列表

840. 模拟散列表 - AcWing题库

1.拉链法

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+3;
int h[N],e[N],ne[N],idx;
void insert(int x)
{
	int k=(x%N+N)%N;
	e[idx]=x;//头插法 
	ne[idx]=h[k];
	h[k]=idx++;
}
bool find(int x)
{
	int k=(x%N+N)%N;
	for(int i=h[k];i!=-1;i=ne[i])
	{
		if(e[i]==x) return true;
	}
	return false;
} 
signed main()
{
	int n;
	cin>>n;
	memset(h,-1,sizeof(h));
	while(n--)
	{
		char op;
		int x;
		cin>>op>>x;
		if(op=='I') insert(x);
		else{
			if(find(x)) puts("Yes");
			else puts("No");
		}
	}
	return 0;
}

 数学里-10%3=2,但在c++中结果是-1,负数模上一个数的结果是负数。

所以我们   (x%N+N)%N

 2.开放寻址法

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+3,null=0x3f3f3f3f;
int h[N];
int find(int x)
{//如果在就返回他的位置,不在就返回他应该存储的位子 
	int k=(x%N+N)%N;
	
	while(h[k]!=null&&h[k]!=x)//如果坑位上有人 
	{
		k++;
		if(k==N) k=0;//循环从0开始	
	}	
	return k; 
}
signed main()
{
	int n;
	cin>>n;
	memset(h,0x3f,sizeof(h));
	while(n--)
	{
		char op;
		int x;
		cin>>op>>x;
		if(op=='I')
		{
			h[find(x)]=x;
		}else{
			if(h[find(x)]!=null) puts("Yes");
			else puts("No"); 
		}
	}
	return 0;
}

字符串哈希

841. 字符串哈希 - AcWing题库

这篇题解解释得很好:AcWing 841. 字符串哈希 【公式助理解】 - AcWing

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ULL;
const int N=1e5+10,P=131;
int n,m;
char str[N];
ULL h[N],p[N];

ULL get(int l,int r)
{
	return h[r]-h[l-1]*p[r-l+1];
}
signed main()
{
	cin>>n>>m>>str+1;
	p[0]=1;
	for(int i=1;i<=n;i++)
	{
		h[i]=h[i-1]*P+str[i];
		p[i]=p[i-1]*P;
	}
	
	while(m--)
	{
		int l1,r1,l2,r2;
		cin>>l1>>r1>>l2>>r2;
		
		if(get(l1,r1)==get(l2,r2)) puts("Yes");
		else puts("No");
	}
	
	return 0;
} 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端框架Vue

Vue 介绍 官方网站&#xff1a;https://cn.vuejs.org/ Vue.js是一种用于构建用户界面的开源JavaScript框架。它是一种轻量级的框架&#xff0c;易于学习和使用。它基于标准HTML&#xff0c;CSS和JavaScript构建&#xff0c;并提供了一套生声明式的&#xff0c;组件时的编程模…

【深入浅出 Spring Security(十三)】使用 JWT 进行前后端分离认证(附源码)

使用 JWT 进行前后端分离认证 一、JWT 的简单介绍二、使用 JWT 进行安全认证后端结合SpringSecurity实现前端Vue3结合Pinia、Axios实现测试结果 一、JWT 的简单介绍 JWT 全称 Java web Token&#xff0c;在此所讲述的是 JWT 用于身份认证&#xff0c;用服务器端生成的JWT去替代…

spring--Ioc控制反转/DI依赖注入

IOC控制反转-解耦 1.概念&#xff1a;在使用对象的时候&#xff0c;由主动的new转换为外部提供对象&#xff0c;将对象创建的控制权交给外部&#xff0c;即控制反转 2.spring提供了一个容器&#xff0c;称为IOC容器&#xff0c;用来从当ioc中的外部 3.被管理或者被创建的对象在…

ChatGPT实战:如何规划自己的职业生涯?

ChatGPT的出现&#xff0c;不仅改变了人们对人工智能技术的认识&#xff0c;也对经济社会发展产生了深远的影响。那么&#xff0c;在ChatGPT时代&#xff0c;人们应该如何规划自己的职业呢&#xff1f; 职业规划是一个有意义且重要的过程&#xff0c;它可以帮助你在职业生涯中…

什么是BI可视化?企业管理决策为什么要用BI系统?

在当今的商业环境中&#xff0c;数据已经成为企业决策制定的重要基础。然而&#xff0c;面对海量的数据&#xff0c;如何有效地分析和利用这些数据&#xff0c;成为了企业管理者面临的一大挑战。BI(Business Intelligence)系统应运而生&#xff0c;它可以帮助企业管理者从复杂的…

基于Java企业人事管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

如何用好强大的 TDengine 集群 ? 先了解 RAFT 在 3.0 中的应用

大家都知道&#xff1a;由于单机数据库在数据规模、并发访问量等方面存在瓶颈&#xff0c;无法满足大规模应用的需求。因此才有了把数据切割分片&#xff0c;分布存储分布处理在多个节点上的数据库&#xff0c;也就是分布式数据库的由来。 而为了实现数据库的高可用&#xff0…

新装Ubuntu虚拟机环境--基本配置流程

新装Ubuntu虚拟机环境--基本配置流程 安装vmware tools修改源 安装vmware tools 点击菜单栏–>虚拟机–>安装VMwaretools桌面上有个图标&#xff0c;点进去 打开这个压缩包–>Extract到桌面&#xff08;or别的文件夹都可以&#xff0c;如果提示空间不足就换其它文件夹…

手把手写一个LED驱动(1)

目录 1.开启驱动开发之路 1.1、驱动开发的准备工作 1.2、驱动开发的步骤 1.3、实践 2.最简单的模块源码分析 2.1、常用的模块操作命令 2.2、模块的安装 2.3、模块的版本信息vermagic 2.4、模块卸载 2.5、模块中常用宏(MODULE_xxx这种宏的作用是用来添加模块描述信息) …

2023年仪器仪表行业研究报告

第一章 行业概况 仪器仪表行业是指专门从事研究、设计、制造、销售和服务于科学研究、生产和生活中所需的各种仪器、仪表和自动化设备的行业。这些仪器和仪表可以用于测量、指示、记录、调节和控制物理、化学和生物过程中的各种参数。这个行业涵盖了广泛的设备和系统&#xff…

今日分享:Midjourney巧妙地用参考图/垫图来绘画图

大家都知道AI绘画工具每次生成的效果都是随机的&#xff0c;但是现在很多AI绘图工具都提供了利用参考图/垫图的方式出图&#xff0c;这样就可以让让AI画作生成自己想要的布局、场景、色彩等等。 国内的AI绘图工具一般都好操作&#xff0c;国外主流的Midjourney也可以添加参考图…

利用for循环和innerHTML在div中再填入多个div

目录 棋盘给每个小格子加上不同的id加上不同的参数传入 我们设置小格子的点击触发事件 循环填充元素 棋盘 先做棋盘&#xff0c;点击出现 <!DOCTYPE HTML> <html><head><meta charset"utf-8"><style>.sty1{background-color:#aaa;he…

旅游网站制作搭建,为旅行业务带来新机遇

旅游业在全球范围内一直都是蓬勃发展的行业之一。随着互联网的普及以及人们对旅行需求的增加&#xff0c;拥有一个精美而功能强大的旅游网站已经成为了旅行从业者的必备条件。本文旨在简单介绍旅游网站是什么&#xff0c;旅游网站的好处&#xff0c;并提供一些快速制作搭建旅游…

10亿上下文!微软新作,引入LongNet将Transformers上下文长度扩充到10亿

夕小瑶科技说 原创 作者 | python, ZenMogre Transformer处理长序列时较为吃力。因为global attention的存在&#xff0c;模型的时间复杂度是序列长度的2次方级。为了建模更长的上下文&#xff0c;人们也提出了各种稀疏注意力机制。而这次&#xff0c;微软卷到家了&#xff0…

word免费转为pdf怎么转,分享这几个方法给大家!

将Word文档转换为PDF格式是一种常见的需求&#xff0c;因为PDF文件具有广泛的兼容性和安全性。本文将介绍三种免费转换Word为PDF的方法&#xff0c;包括记灵在线工具、使用Word自带功能以及使用Smallpdf。这些方法简单易行&#xff0c;帮助您轻松完成转换&#xff0c;方便与他人…

【尚医通】vue3+ts前端项目开发笔记——项目分析

尚医通开发笔记 一、项目分析 项目在线地址&#xff1a;http://syt.atguigu.cn测试帐号&#xff1a;17720125002 首页 home header 全局组件布局 左&#xff1a;logo 、title中&#xff1a;初始隐藏 搜索框 公共组件显示条件&#xff1a;在页面滚动到页面内搜索框的位置显示…

Go语言中的运算符

Golang 内置的运算符 算术运算符 关系运算符 逻辑运算符 位运算符&#xff08;不常用&#xff09; 赋值运算符 算数运算符 运算符描述相加-相减*相乘/相除%求余 a : 10b : 9fmt.Printf("ab的值为%v\na-b的值为%v\na*b的值为%v\n",ab,a-b,a*b) 除法注意&#xff1a;…

uniapp:粘性布局(吸顶:u-sticky)生效的注意事项

使用场景&#xff1a;要求首次渲染时不需要固定在页面顶部&#xff08;正常布局&#xff09;&#xff0c;当随着页面的滚动&#xff0c;需要将起固定在页面顶部&#xff0c;会使用到可能的有&#xff1a;tab、搜索框、导航、标题、头图…工具&#xff1a;用了uview2的组件<u…

手撕spring04源码(A依赖B)

概述 本章节优化上一章节通过构造方法实例化对象属性填充问题的痛点&#xff0c;并解决A bean依赖B bean的问题 整体设计 知识点补充 spring生命周期 在Spring中&#xff0c;Bean的生命周期包括实例化、初始化和销毁三个阶段。下面是对每个阶段的解释&#xff1a; 实例化…

河南企业级泛域名SSL证书

电脑的普及让网络可以快速发展&#xff0c;紧随网络的发展各个CA认证机构推出了泛域名SSL证书、多域名SSL证书等可以用一张SSL证书保护多个域名网站的SSL数字证书。泛域名SSL证书也叫通配符SSL证书&#xff0c;可以用一张SSL证书保护主域名以及主域名下所有的子域名网站&#x…