美文网首页基础算法分析实现
算法 - 数组循环左移m个元素

算法 - 数组循环左移m个元素

作者: erlich | 来源:发表于2022-07-29 19:56 被阅读0次

题目

  • 整数数组,n个元素
  • 数组循环左移m个元素
  • [1,2,3,4,5,6,7,8,9] -> [4,5,6,7,8,9,1,2,3]

思路

  • 数组整体逆转 [1,2,3,4,5,6,7,8,9] -> [9,8,7,6,5,4,3,2,1]
  • 如果循环移动元素个数为3,拆分两部分处理 [9,8,7,6,5,4] [3,2,1]
  • [9,8,7,6,5,4] 逆转 -> [4,5,6,7,8,9]
  • [3,2,1] 逆转 -> [1,2,3]
  • 得到 [4,5,6,7,8,9,1,2,3]

主要还是在于思路,能不能通过多次利用逆转就是解题的关键了

实现

void arrayReverse(int array[], int l, int r) {
    while (l < r) {
        array[l] = array[l] ^ array[r];
        array[r] = array[l] ^ array[r];
        array[l] = array[l] ^ array[r];
        l++;
        r--;
    }
}
// 数组循环左移m个元素
// n元素个数
void cyclcShiftLeft(int array[], int n, int m) {
    printf("循环左移之前:\n");
    for (int i = 0; i < n; i++) {
        printf("%6i", array[i]);
    }
    printf("\n");
    arrayReverse(array, 0, n - 1);
    arrayReverse(array, 0, n - m - 1);
    arrayReverse(array, n - m, n - 1);
    
    printf("循环左移之后:\n");
    for (int i = 0; i < n; i++) {
        printf("%6i", array[i]);
    }
    printf("\n");
}

相关文章

  • 算法 - 数组循环左移m个元素

    题目 整数数组,n个元素 数组循环左移m个元素 [1,2,3,4,5,6,7,8,9] -> [4,5,6,7,8...

  • 将数组元素循环移动p位,交换次数仅为n次

    算法思路 循环左移p位 数组序列长度为n,左移p位。 算法步骤 代码如下: 循环左移p位 数组序列长度为n,右移p...

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

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

  • 数组循环左移

    数组循环左移 本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组...

  • 数组元素左移

    设将n(n>1)个整数存放到一维数组R中, 试设计一个在时间和空间两方面都尽可能高效的算法;将R中保存的序列循环左...

  • 第一章1.1 循环左移 2019-01-27

    题:设将n个整数存放在一个数组R中,设计算法实现R中的序列循环左移P个位置 思路:1、将R中前P个元素逆置 2...

  • 排序算法:冒泡排序O(n)~O(n^2)

    核心思想 冒泡排序是基于相邻元素相互比较的排序算法,算法的核心有2点:内外双循环:外循环遍历数组;内循环遍历数组并...

  • leetcode-探索初级算法-2019-10-14

    排序数组中删除重复元素 双层for循环 + splice The simplest approach (in m...

  • 集合,数组,字典的快速遍历和排序

    遍历 for 循环遍历 原理:通过for循环的循环变量用作数组元素下标来获取不同下标的元素循环次数就是数组元素的个...

  • 1.选择排序

    选择排序算法描述: 文字描述:一个元素个数为n的数组,循环n-1次,在循环中,将未排序元素的第一个元素(为选定的元...

网友评论

    本文标题:算法 - 数组循环左移m个元素

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