美文网首页
数组循环移位

数组循环移位

作者: LEO_青蛙 | 来源:发表于2020-08-23 18:44 被阅读0次

设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。
1、简单的办法,每次将数组中的元素右移一位,循环K次。

void RightShift(int *arr, int N, int K)
{
  K %= N;
  while(K--)
  {
    int temp = arr[N-1];
    for(int i=N-1; i>0; --i)
    {
      arr[i] = arr[i-1];
    }
    arr[0] = temp;
  }
}

算法复杂度为O(K*N)
2、优化的方法,将数组分成两个整体,右移K位的过程就是把数组的两部分交换位置。

void Reverse(int *arr, int b, int e)
{
  for(; b<e; b++, e--)
  {
    int temp = arr[e];
    arr[e] = arr[b];
    arr[b] = temp;
  }
}

void RightShift(int *arr, int N, int K)
{
  K %= N;
  Reverse(arr, 0, N-K-1);
  Reverse(arr, N-K-1, N-1);
  Reverse(arr, 0, N-1);
}

算法复杂度为O(N);

相关文章

  • 数组循环移位

  • 数组循环移位

    设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。1、简单的...

  • 通过数组逆置进行循环移位

    通过数组逆置进行循环移位 2018-09-09 Question设计算法将数组a[n]循环左移k位,并要求时间复杂...

  • C语言位运算的面试题1

    输入一个字节内的数(0~255)和移动位数。输出移位结果(要求循环移位)。 提示:系统自带的移位都是非循环的 i...

  • C语言实现数组的循环移位

    算法 Reverse Array (数组翻转) code 上述代码通过异或运算来高效实现变量值的交换,请记住: 任...

  • PTA BASIC 1008.数组元素循环右移问题

    原题目链接 题解与感想 数组循环移位这篇文章写的很详细,建议仔细阅读(毕竟PTA Basic官方说了难度不超过排序...

  • 数组的移位

    如何将我们的数组整体向前移位呢?我们可以考虑使用System.arraycopy方法来进行,将原有的数组复制到新的...

  • vue循环与显示

    vue循环 v-for循环普通数组 数组索引值 循环对象数组 循环对象,值(1,ts,man)键(id,name,...

  • 005-数组,冒泡排序,二分查找法

    什么是数组? 为什么要用数组? 数组如何定义 数组遍历 for循环遍历 增强for循环 数组的默认值 数组的特点 ...

  • JS进阶篇

    数组 一维数组 二维数组 循环 break:退出整个循环;continue:退出此次循环,继续下一个数据的循环 事...

网友评论

      本文标题:数组循环移位

      本文链接:https://www.haomeiwen.com/subject/lccwjktx.html