首页 > 试题广场 >

旋转数组

[编程题]旋转数组
  • 热度指数:60305 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
一个数组A中存有 n 个整数,在不允许使用另外数组的前提下,将每个整数循环向右移 M( M >=0)个位置,即将A中的数据由(A0 A1 ……AN-1 )变换为(AN-M …… AN-1 A0 A1 ……AN-M-1 )(最后 M 个数循环移至最前面的 M 个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

数据范围:
进阶:空间复杂度 ,时间复杂度
示例1

输入

6,2,[1,2,3,4,5,6]

输出

[5,6,1,2,3,4]
示例2

输入

4,0,[1,2,3,4]

输出

[1,2,3,4]

备注:
(1<=N<=100,M>=0)
头像 牛客题解官
发表于 2022-04-22 13:10:03
精华题解 题目主要信息: 一个长度为nnn的数组,将数组整体循环右移mmm个位置(mmm可能大于nnn) 循环右移即最后mmm个元素放在数组最前面,前n−mn-mn−m个元素依次后移 不能使用额外的数组空间 举一反三: 学习完本题的思路你可以解决如下题目: BM99. 顺时针旋转矩阵 方法:三次翻转(推荐 展开全文
头像 Maokt
发表于 2021-07-24 11:18:44
算法思想一:使用额外数组 解题思路: 可以使用额外的数组来将每个元素放至正确的位置。遍历原数组,将原数组下标为 i 的元素放至新数组下标为 (i+m) mod n (为了防止右移的长度大于数组的长度,所以才有取余)的位置,最后返回新数组即可 图解: 代码展示: 展开全文
头像 华丽残酷的乐章
发表于 2022-04-24 09:20:35
* 旋转数组 * @param n int整型 数组长度 * @param m int整型 右移距离 * @param a int整型一维数组 给定数组 * @return int整型一维数组 */ function solve( n , m , a ) { // write 展开全文
头像 要成为超级兵的小兵
发表于 2021-04-07 11:01:20
class Solution { public: /** * 旋转数组 * @param n int整型 数组长度 * @param m int整型 右移距离 * @param a int整型vector 给定数组 * @return int 展开全文
头像 小橙紫
发表于 2021-10-23 13:16:31
两个for循环嵌套,第一层是需要循环的次数,第二层则是遍历数组每一个元素调换位置。往右移是从大至小遍历,往左移是从小至大遍历即可。 import java.util.*; public class Solution { /** * 旋转数组 * @param n in 展开全文
头像 超级码力233
发表于 2020-11-26 17:02:22
旋转数组 题目链接 Solution 模拟。新建一个vector,先加入后面n-m个元素,然后加入前面m个元素即可。代码实现较为简单,需要注意下m如果大于n的情况,需要让m模n。 Code class Solution { public: vector<int> solve(in 展开全文
头像 小楼闹着玩儿
发表于 2021-12-07 21:03:27
开始题解前,先通过一个例子,直观的感受下移动的效果。 a = [1,2,3,4] n = m = 4 a = [1,2,3,4] # m = 0,移动0次,即不需要移动 a = [4,1,2,3] # m = 1,移动一次 a = [3,4,1,2] # m = 2,移动两次 a = [2,3,4 展开全文
头像 fulmin
发表于 2022-03-07 21:26:51
假如这个数组是a = [1,2,3,4,5] 我的思路是,先在前面补m个0,这样从原来的a[0]到a[n-m]平移的部分就解决了 即:a = [0] + a, m = 2, a就从[1,2,3,4,5]变成了[0,0,1,2,3,4,5] 然后,把前面的几个0变成a[n-m+1]到a[n] 即:a[ 展开全文
头像 OFFER/OFFER
发表于 2022-03-07 15:45:07
* 旋转数组 * @param n int整型 数组长度 * @param m int整型 右移距离 * @param a int整型一维数组 给定数组 * @param aLen int a数组长度 * @return int整型一维数组 * @return int* returnSi 展开全文
头像 你说夕阳很美
发表于 2021-11-09 15:48:53
class Solution { public: /** * 旋转数组 * @param n int整型 数组长度 * @param m int整型 右移距离 * @param a int整型vector 给定数组 * @return int 展开全文
头像 聪明的我寄了
发表于 2023-09-05 11:53:31
只用旋转一次,总替换次数n次,比经典的3次旋转更优。 class Solution { public:     /**      * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可      *      * 旋转数组      * @param n int整型 数组长度 展开全文

问题信息

上传者:牛客332641号
难度:
163条回答 6044浏览

热门推荐

通过挑战的用户

查看代码
旋转数组