zoukankan      html  css  js  c++  java
  • 字符串循环右移N位

    给一个长度为n的字符串,把这个字符串循环右移N位(0<N<n),要求只用O(1)的额外空间和O(N)时间,有些什么方法

    一开始想到的是先保存temp=s[0],在左起第N个移到s[0]的位置,依次,但是会有问题

    10

    1 2 3 4 5 6 7 8 9 10

    2

    会成一个环路0 2 4 6 8

    后来查了一下,有个叫做三次逆转的方法

    X1部分为开始的K位字符,X2为剩下的N-K位,

    先将X1逆转,在将X2逆转,在整个数组逆转

    #include<stdio.h>
    #include<iostream>
    using namespace std;
    
    int s[109];
    
    int main(){
        int n,k;
        while(scanf("%d",&n)!=EOF){
            int i;
            for(i=0;i<n;i++){
                scanf("%d",&s[i]);
            }
            scanf("%d",&k);
            k=k%n;
    
            int end1=(k-1)/2;
            int end2=(k+n-1)/2;
            int end3=(n-1)/2;
            for(i=0;i<=end1;i++){
                swap(s[i],s[k-1-i]);
            }
            for(i=k;i<=end2;i++){
                swap(s[i],s[n-1+k-i]);
            }
            for(i=0;i<=end3;i++){
                swap(s[i],s[n-1-i]);
            }
    
            for(i=0;i<n;i++){
                printf("%d
    ",s[i]);
            }
        }
    }
    View Code
  • 相关阅读:
    topcoder srm 445 div1
    topcoder srm 440 div1
    topcoder srm 435 div1
    topcoder srm 430 div1
    topcoder srm 400 div1
    topcoder srm 380 div1
    topcoder srm 370 div1
    topcoder srm 425 div1
    WKWebView强大的新特性
    Runtime那些事
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3452956.html
Copyright © 2011-2022 走看看