其实我们可以从末尾来写。什么意思呢?就是说我们可以以n为起点,来分开写.
我们可以通过一个题来讲述这件事
现在有一个长度为n的数组,现在有m个操作,操作分别有:
1:删除当前数组最后一个元素,如果数组中没有元素则忽略;
2 x:在当前数组最后一个数后面插入一个数x;
3:删除当前数组中第一个元素,如果数组中没有元素则忽略;
4 x:在当前数组第一个元素前面插入一个数x;
怎么写呢?还是我说的,从末尾开写!
#include<bits/stdc++.h>
using namespace std;
int n,m,a[3000010],head,tail;
long long sum;
int main()
{
cin>>n;
head=n+1;tail=n+1+n;
for(int i=head;i<tail;i++)
cin>>a[i];
cin>>m;
for(int i=1;i<=m;i++)
{
int x,k;
cin>>x;
if(x==1)
if(head!=tail)
tail--;
if(x==2){
cin>>k;
a[tail++]=k;
}
if(x==3)
if(head!=tail)
head++;
if(x==4){
cin>>k;
a[--head]=k;
}
}
for(int i=head;i<tail;i++)
sum+=a[i];
cout<<sum;
return 0;
}
这个就是一个显然的空间换时间,这种写法比上一种写快了至少3倍!

本文描述了一种使用C++实现的数组操作算法,通过从数组末尾开始进行插入和删除操作,显著提高了效率,达到至少3倍于传统方法的速度,体现了空间换时间的优化策略。
——高级做法&spm=1001.2101.3001.5002&articleId=138258227&d=1&t=3&u=6ec20e417641459d99a6a44e2417cf68)
525

被折叠的 条评论
为什么被折叠?



