关注
#include<cstdio>
#include<queue>
using namespace std;
int a[1000010],n;
int main(){
while(~scanf("%d",&n)){
for(int i=1;i<=n;i++){
a[i]=n-i+1;
}
int i=1,j=n,k=0;
deque<int> q;
int res=0;
while(i<=j){
if(!k){
q.push_back(a[i]);
int sz=q.size();
res=max(res,sz);
a[i]=a[j];
i++,j--;
}else{
int top=q.front();
q.pop_front();
int tmp=a[i];
a[i]=top;
q.push_back(tmp);
int sz=q.size();
res=max(res,sz);
i++;
}
k=k^1;
}
if(a[i-1]==q.back()) q.pop_back();
while(!q.empty()){
if(!k){
int top=q.back();
q.pop_back();
a[i]=top;
i++,k=k^1;
}else{
int top=q.front();
q.pop_front();
a[i]=top;
i++,k=k^1;
}
}
for(int i=1;i<=n;i++){
printf("%d ",a[i]);
}
printf("\n");
}
}
时间复杂度O(n)肯定没问题。
如果n很小的话,队列元素很少,空间复杂度可以看成是常数级别O(1)。
如果n为10^6级别的话,则队列最大元素个数可用res那个变量求出,大概在3*10^5左右。n为10^5,
则res为3*10^4左右。。
总之就是双指针在使用的过程中,覆盖的元素会越来越多,因而只能用队列来保存。如果n为10^6级别,
纯O(1)做法,不会覆盖别的元素的做法还真没想出来。
查看原帖
点赞 4
相关推荐
点赞 评论 收藏
分享
12-15 14:16
门头沟学院 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 2025年终总结 #
166385次浏览 2816人参与
# 找工作,行业重要还是岗位重要? #
84760次浏览 1676人参与
# 你面试体验感最差/最好的公司 #
12893次浏览 212人参与
# 一人说一个提前实习的好处 #
7832次浏览 145人参与
# 重来一次,你会对开始求职的自己说 #
5148次浏览 131人参与
# 秋招落幕,你是He or Be #
7709次浏览 169人参与
# 实习没事做是福还是祸? #
13025次浏览 205人参与
# 今年你最想重开的一场面试是? #
2603次浏览 52人参与
# 团建是“福利”还是是 “渡劫” #
6118次浏览 139人参与
# 你小心翼翼的闯过多大的祸? #
10067次浏览 147人参与
# 比亚迪工作体验 #
73525次浏览 279人参与
# 大厂VS公务员你怎么选 #
73558次浏览 675人参与
# 工作中听到最受打击的一句话 #
4733次浏览 84人参与
# 如何排解工作中的焦虑 #
247144次浏览 2277人参与
# 长城汽车工作体验 #
12868次浏览 16人参与
# 大家实习每天都在干啥 #
106183次浏览 572人参与
# 机械人避雷的岗位/公司 #
38595次浏览 261人参与
# 秋招结束之后的日子 #
114126次浏览 1052人参与
# 应届生进小公司有什么影响吗 #
109774次浏览 1124人参与
# 总结:哪家公司面试体验感最差 #
83264次浏览 388人参与


美团公司福利 3017人发布