美文网首页
【算法题】5.左移数组

【算法题】5.左移数组

作者: _涼城 | 来源:发表于2020-04-13 11:30 被阅读0次
题目

设将n(n>1)个整数存放到⼀维数组R中, 试设计一个在时间和空间两方面都尽可能高效的算法;将R中保存的序列循环左移p个位置(0<p<n)个位置, 即将R中的数据由(x0,x1,......,xn-1)变换为 (xp,xp+1,...,xn-1,x0,x1,...,xp-1)。

题目大意:

将数组左移 p个位置拼接至数组末尾。

输入:

[0,1,2,3,4,5,6,7,8,9], n = 10,p = 3

输出:

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

解析:
  1. 反转数组
  2. 反转数组中n-p以前的元素
  3. 反转数组中n-p以后的元素
复杂度分析

时间复杂度:O(n)
空间复杂度:O(1)

代码
void reverse(int *pre,int left,int right){
    int i = left,  j = right;
    while(i < j){
     temp = pre[i];
     pre[i] = pre[j]
     pre[j] = temp;
     i++;
     j--;
    }
}

void LeftShift(int *pre,int n,int p){
 if (p > 0 && p < n) 
 {
     reverse(pre,0,n);
     reverse(pre,0,n-p-1);
     reverse(pre,n-p,n-1);
 }
}

相关文章

网友评论

      本文标题:【算法题】5.左移数组

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