题解 | #调整牛群的位置#
调整牛群的位置
https://www.nowcoder.com/practice/cfa2130da69449229d8159561d39b0d3
知识点
思维,数组函数
思路
首先我们假设数组长度为n,现将k%=n,因为可以先除去周期性。 我们知道,k次移位代表着前k个数的相对位置和后n-k个数交换,且内部次序不变。对数组的部分片段翻转2次,不会改变内部的相对顺序,对两个部分进行1次翻转,既会改变内部顺序,也会改变两个部分的相对顺序。
所以我们可以先对两个部分分别翻转,再整体反转,将内部次序保持一致,外部次序保持逆序。 例:对ABCDE FGHIJ 先翻转两个部分:EDCBA JIHGF 再整体反转: FGHIJ ABCDE 得到了想要的东西
代码
#include <iterator>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @param k int整型
* @return int整型vector
*/
vector<int> rotate_left(vector<int>& nums, int k) {
// write code here
int n=nums.size();
k%=n;
reverse(nums.begin(),nums.begin()+k);
reverse(nums.begin()+k,nums.end());
reverse(nums.begin(),nums.end());
return nums;
}
};