算法 - 数组循环左移m个元素
题目
- 整数数组,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个元素相关推荐
- 长度为n的整数数组循环左移右移m位
长度为n的整数数组循环左移m位 右移m相当于左移n-m // pat.cpp : Defines the entry point for the console application. //#inc ...
- 【算法】将数组循环左移
问题描述 设将n(n>1)个整数存放到一维数组 arr 中.将 arr 中保存的序列循环左移p (0<p<n)个位置,即将 arr 中的数据由(X0,X1,-, Xn-1)变换为(X ...
- 7-2 数组循环左移(20分)(顺序表实现)
题目描述: 本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a0 a1 - ...
- 数组循环左移 C++
目录 题目描述 思路分析 AC代码 题目描述 本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置, ...
- 浙江大学PTA 数据结构 习题2.2 数组循环左移 (20 分)
本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a0a1⋯an ...
- 算法-字符串 循环左移
1.字符串循环左移 例:abcdef 循右移n位 如n=2 思路:(X'Y')' =YX '即逆序 及X={a b } Y={c d e f} X'=b a Y'=f e d c 该算法 ...
- 习题2.2 数组循环左移(20 分)浙大版《数据结构(第2版)》题目集
本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a0a1⋯an ...
- 数组循环左移问题,将一个N个元素的数组向左移i个位置
解法一: 先将数组前i个元素存在临时数组,在将余下的n-i个元素左移i个位置,最后将临时数组中的元素复制到后面i个位置 复杂度: 需移动i+(n-i)+i = i+n 次数组单元 需i个额外存储单元 ...
- c语言 数组循环左移m位
#include<stdio.h> //函数原型 void rightshiftleft(int *p_num,int n,int m); void enterint(int *p_num ...
最新文章
- Windows配置jdk环境变量JAVA_HOME与path
- IOC--IOC+AOP--热插拔的系统架构实现演化
- 前端学习(1173):两种字符串方法
- 接口测试实例(jmeter)
- C++——拷贝构造函数和赋值函数的注意点
- ASP.NET 安全认证
- 普通人怎么样才能存到钱?
- Visual Studio 2013 、Matlab 2014产品密钥
- 莫烦python学习笔记
- python基础-读写txt文件
- java验证码不显示_chrome无法显示Java生成的验证码图片
- php 抓取网页图片
- python模拟ios点击_iOS13 模拟点击 模拟触摸 按键模拟 自写按键精灵
- 计算机主机电源键,按电脑主机机箱电源键后,却没有任何反应疑难问题
- 是谁扼杀了你的梦想?
- 程序员副业兼职5000+ ?
- 文末福利|使用Python转换PDF,Word/Excel/PPT/md/HTML都能转!
- 心态很容易受别人影响_太容易被别人影响,我上辈子可能是个“复印机”
- 【Java】Java的垃圾回收
- 【opencv学习笔记】030 之 凸包之Graham扫描法与Jarvis步进法详解