8、数组循环移位问题

0人阅读 评论(0) 收藏 举报
分类:

把一个数组中的元素循环右移k位,时间复杂度严格为O(n),不能是O(kn).

利用三次对调,每次对调时间复杂度为 n/2 ,sum(n/2) 刚好为N
这里写图片描述

public class Displacement {

    public static void removerightk(int a[],int k){
        k=k%a.length;                   //由于k可能大于n,所以将k化为1~n之间
        int index=a.length-k;
        if(k<0){
            index = -k;
        }

        reverse(a,0,index-1);
        reverse(a,index,a.length-1);
        reverse(a,0,a.length-1);
    }
    public static void reverse(int a[],int s,int e){
        System.out.println("----------");
        while(s<e){
            int t=a[s];
            a[s]=a[e];
            a[e]=t;
            s++;
            e--;
            System.out.println(Arrays.toString(a));
        }
    }
    public static void main(String[] args) {
        int a[]={0,1,2,3,4,5,6,7,8,9};
        removerightk(a, -2);
    }
}

[1, 0, 2, 3, 4, 5, 6, 7, 8, 9]

[1, 0, 9, 3, 4, 5, 6, 7, 8, 2]
[1, 0, 9, 8, 4, 5, 6, 7, 3, 2]
[1, 0, 9, 8, 7, 5, 6, 4, 3, 2]
[1, 0, 9, 8, 7, 6, 5, 4, 3, 2]

[2, 0, 9, 8, 7, 6, 5, 4, 3, 1]
[2, 3, 9, 8, 7, 6, 5, 4, 0, 1]
[2, 3, 4, 8, 7, 6, 5, 9, 0, 1]
[2, 3, 4, 5, 7, 6, 8, 9, 0, 1]
[2, 3, 4, 5, 6, 7, 8, 9, 0, 1]

查看评论

编程之美6:数组循环移位

楼主又来~(≧▽≦)/~啦啦啦,科研,就是要这么一鼓作气。额,其实楼主的老本行是推公式啊,做这些算法题,其实是楼主在偷懒。额,话不多说了,快请出我们今天的主角吧!还是关于数组的-数组循环移位。下面我们...
  • XIAXIA__
  • XIAXIA__
  • 2015-04-13 16:49:55
  • 2215

数组循环移位问题

《编程之美》中的题目要求只使用两个附加变量。王晓东编著的《算法设计与实验题解》中要求只用到O(1)的辅助空间。其它地方两本书的要求相同,都是O(n)的时间复杂度。两本书中的解法总结起来就是三种方法:(...
  • jcwKyl
  • jcwKyl
  • 2009-02-10 16:41:00
  • 5792

PAT 数组元素循环右移问题 (Python)

一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN-1)变换为(AN-M …… AN-1 A0 A1……AN...
  • crazywaster
  • crazywaster
  • 2015-06-29 00:47:02
  • 1290

PAT-B 1008. 数组元素循环右移问题(python)

if __name__ == "__main__" : num = raw_input().split(' ') n = int(num[0]) m = - int(num[1...
  • u014674776
  • u014674776
  • 2014-05-19 04:47:53
  • 2239

MATLAB学习笔记之-----数列的循环移位操作

有一组数列,比如a=[1 2 3 4 5 6 7],怎样能做出数列[7 1 2 3 4 5 6] ,[6 7 1 2 3 4 5]:   >> a=[1 2 3 4 5 6 7] a =   ...
  • u011650143
  • u011650143
  • 2017-05-10 13:52:34
  • 1048

C语言数组元素的循环移位

/*C语言数组元素的循环移位*/ #include int main() {     int num[5],num1[5]; int i, j,k=1; int t,n;...
  • zggzgw
  • zggzgw
  • 2017-02-07 19:31:30
  • 1808

数组循环移位的几种解法

题目描述: 设计一个算法,把一个含有N个元素的数组循环右移K位。解法一: 最容易想到的就是每次将数组中的元素右移一位,循环K次。#include using...
  • mayh554024289
  • mayh554024289
  • 2015-08-23 23:02:40
  • 5186

程序员面试100题之十一:数组循环移位

设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。      不合题意的解法如下:      我们先试验简单的办法,可以每次将数组中的元素右移...
  • Hackbuteer1
  • Hackbuteer1
  • 2011-08-18 22:43:54
  • 12301

字符串——循环移位包含问题

题目: 给定两个字符串s1,s2,要求判断s2能否被s1循环移位得到的字符串包含。 例如给定s1="AABCD"和s2="CDAA“,返回true ;给定s1="ABCD"和s2="ACBD",返回f...
  • jingsuwen1
  • jingsuwen1
  • 2016-07-17 11:41:26
  • 484

数组左循环移位算法

今天开始将持续更新关于C/C++的一个数据结构的博客更新 无奈考研会要求到有一个数据结构神一样的存在,今晚晚上重新回顾了我那不堪回忆的C/C++代码编写,只有一句话可以表达我的感受,那就是:人生苦短...
  • qq_36470920
  • qq_36470920
  • 2017-07-31 03:21:00
  • 213
    个人资料
    持之以恒
    等级:
    访问量: 5125
    积分: 810
    排名: 6万+
    博客专栏
    文章存档
    最新评论