关注
#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
相关推荐
牛客热帖
更多
正在热议
更多
# mt对你说过最有启发的一句话 #
3422次浏览 63人参与
# 考研失败就一定是坏事吗? #
160099次浏览 1136人参与
# 被上班搭子“传染”了哪些习惯 #
1492次浏览 50人参与
# 今年秋招你收到了多少封邮件? #
3436次浏览 75人参与
# 工作后,你落下了哪些病根 #
3755次浏览 100人参与
# 秋招特别不鸣谢 #
2729次浏览 45人参与
# 非技术2024笔面经 #
446434次浏览 4911人参与
# 选实习,你更看重哪方面? #
2882次浏览 57人参与
# 工作后明白的那些道理 #
35816次浏览 477人参与
# 什么是优秀的实习经历 #
1209次浏览 50人参与
# 巨人网络求职进展汇总 #
181481次浏览 1214人参与
# 摸鱼被leader发现了怎么办 #
76946次浏览 449人参与
# 工作中遇到的歹人 #
5782次浏览 116人参与
# 你见过最离谱的招聘要求是什么? #
246382次浏览 1697人参与
# 秋招感动瞬间 #
109702次浏览 497人参与
# 选完offer后,你后悔学机械吗? #
49274次浏览 270人参与
# 当发现同事想辞职 #
12377次浏览 39人参与
# 校招泡的最久的公司是哪家? #
45958次浏览 172人参与
# 分享一个让你热爱工作的瞬间 #
53317次浏览 467人参与
# 上班到公司第一件事做什么? #
115408次浏览 810人参与