网站域名如何修改,快速搭建电子商务网站,做网站赚钱吗 怎么赚,wordpress禁止搜索代码牛客题霸 [ 旋转数组] C题解/答案
题目描述
一个数组A中存有N#xff08;Ngt0#xff09;个整数#xff0c;在不允许使用另外数组的前提下#xff0c;将每个整数循环向右移M#xff08;M0#xff09;个位置#xff0c;即将A中的数据由#xff08;A0 A1 ………牛客题霸 [ 旋转数组] C题解/答案
题目描述
一个数组A中存有NNgt0个整数在不允许使用另外数组的前提下将每个整数循环向右移MM0个位置即将A中的数据由A0 A1 ……AN-1 变换为AN-M …… AN-1 A0 A1 ……AN-M-1 最后M个数循环移至最前面的M个位置。如果需要考虑程序移动数据的次数尽量少要如何设计移动的方法
题解
很多人都用额外的变量来实现移动我这提供一个比较巧妙的思路 [1,2,3,4,5,6]—[5,6,1,2,3,4] 我们可以先将整个数组翻转 就成[6,5,4,3,2,1] 因为是移动m所以我们前m个数字再翻转 就成[5,6,4,3,2,1] 我们再将第m1位到最后所有数翻转 就成[5,6,1,2,3,4] 这样就实现了移动还没有用到其他任何变量
代码
class Solution {
public:/*** 旋转数组* param n int整型 数组长度* param m int整型 右移距离* param a int整型vector 给定数组* return int整型vector*/vectorint solve(int n, int m, vectorint a) {// write code herem m%n;reverse(a.begin(), a.end());reverse(a.begin(), a.begin()m);reverse(a.begin()m, a.end());return a;//return a;}
};