题目

  • 整数数组,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");
}

总结

此算法问题看上去没什么特别之处,但是如果按部就班处理,就会陷入多次重复,不一定能达到最终目的

在此问题基础上,可以联想另一个问题

This is a line simple Code

将上面句子倒装,不能占用额外的空间

Code simple line a is This

其实思路跟文中算法是类似的

先把句子处理成 edoC elpmis enil a si sihT

然后每个单词倒装

本文中的算法主要在于关联分析,尤其是空间限制比较严格的算法问题

算法 - 数组循环左移m个元素相关推荐

  1. 长度为n的整数数组循环左移右移m位

    长度为n的整数数组循环左移m位 右移m相当于左移n-m // pat.cpp : Defines the entry point for the console application. //#inc ...

  2. 【算法】将数组循环左移

    问题描述 设将n(n>1)个整数存放到一维数组 arr 中.将 arr 中保存的序列循环左移p (0<p<n)个位置,即将 arr 中的数据由(X0,X1,-, Xn-1)变换为(X ...

  3. 7-2 数组循环左移(20分)(顺序表实现)

    题目描述: 本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a0 a1 - ...

  4. 数组循环左移 C++

    目录 题目描述 思路分析 AC代码 题目描述 本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置, ...

  5. 浙江大学PTA 数据结构 习题2.2 数组循环左移 (20 分)

    本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a​0​​a​1​​⋯a​n ...

  6. 算法-字符串 循环左移

    1.字符串循环左移 例:abcdef 循右移n位 如n=2 思路:(X'Y')' =YX    '即逆序 及X={a b }  Y={c d e f} X'=b a    Y'=f e d c 该算法 ...

  7. 习题2.2 数组循环左移(20 分)浙大版《数据结构(第2版)》题目集

    本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a​0​​a​1​​⋯a​n ...

  8. 数组循环左移问题,将一个N个元素的数组向左移i个位置

    解法一: 先将数组前i个元素存在临时数组,在将余下的n-i个元素左移i个位置,最后将临时数组中的元素复制到后面i个位置 复杂度: 需移动i+(n-i)+i = i+n 次数组单元 需i个额外存储单元 ...

  9. c语言 数组循环左移m位

    #include<stdio.h> //函数原型 void rightshiftleft(int *p_num,int n,int m); void enterint(int *p_num ...

最新文章

  1. Windows配置jdk环境变量JAVA_HOME与path
  2. IOC--IOC+AOP--热插拔的系统架构实现演化
  3. 前端学习(1173):两种字符串方法
  4. 接口测试实例(jmeter)
  5. C++——拷贝构造函数和赋值函数的注意点
  6. ASP.NET 安全认证
  7. 普通人怎么样才能存到钱?
  8. Visual Studio 2013 、Matlab 2014产品密钥
  9. 莫烦python学习笔记
  10. python基础-读写txt文件
  11. java验证码不显示_chrome无法显示Java生成的验证码图片
  12. php 抓取网页图片
  13. python模拟ios点击_iOS13 模拟点击 模拟触摸 按键模拟 自写按键精灵
  14. 计算机主机电源键,按电脑主机机箱电源键后,却没有任何反应疑难问题
  15. 是谁扼杀了你的梦想?
  16. 程序员副业兼职5000+ ?
  17. 文末福利|使用Python转换PDF,Word/Excel/PPT/md/HTML都能转!
  18. 心态很容易受别人影响_太容易被别人影响,我上辈子可能是个“复印机”
  19. 【Java】Java的垃圾回收
  20. 【opencv学习笔记】030 之 凸包之Graham扫描法与Jarvis步进法详解

热门文章

  1. 苹果M2 Max Geekbench 跑分曝光:12 核 / 3.5GHz,配 96GB 内存
  2. Spring官网获取jar包以及source文件
  3. 【AHK】常用键位映射设置推荐(个人自用)
  4. 行业软件英文缩写中文翻译
  5. 建一个外贸独立站大约多少钱最低?
  6. 3Dmax2010教程 第一课
  7. acwing 1248. 灵能传输(蓝桥杯)
  8. 深度学习(2)——生成对抗网络
  9. delphiXE下成功安装OpenCV
  10. android手机刷系统升级,闪回收-怎么刷机安卓系统升级?