最直观的想法,从第一位开始取,比较他和当前已经排好序的部分开头的数字比较,若比这个数字小,那么一定是放到左边作为新的开头,若是比这个数字大,那么一定放在右边
进一步来讲,得到的最终序列的开头一定是整个原序列中,从右往左数除0以外的最小的数,而这个数后面的数因为都大于这个最小的数,所以一定是顺序插入的,不会再改变顺序,他之前的数还是按照开始直观的想法插入即可,到这个数就放到开头
这里我用了STL中deque,双端队列,他是一个可以从头或者尾插入的队列,可以看做是一个动态的数组
//By AcerMo #include#include #include #include #include #include using namespace std; signed main() { int t;cin>>t; while(t--) { char s[105];cin>>s; int l=strlen(s),m=110; char mn='9'; for(int i=0;i =s[i]) mn=s[i],m=i; deque q; q.push_back(s[0]); for(int i=1;i m) q.push_back(s[i]); else if(i==m) q.push_front(s[i]); } while (q.size()) cout< 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)