题解 | #调整牛群的位置#
调整牛群的位置
https://www.nowcoder.com/practice/cfa2130da69449229d8159561d39b0d3
知识点:
反转数组/数组操作/取余数
分析:
两次反转数组
- 第一次翻转数组使前n-k个元素移动到后方,后k个元素翻转到前方但内部顺序正好相反
- 所以再翻转[0,k-1] [k,n]后即可得到答案
- 注意k大于n的情况,可以取一个余数,这样子大于数组长度也能保证有效的旋转次数
编程语言:
C++
完整代码:
void reverse(vector<int>& nums, int start, int end) { while (start < end) { swap(nums[start++], nums[end--]); } } vector<int> rotate_left(vector<int>& nums, int k) { k = k % nums.size(); int n = nums.size() - 1; reverse(nums, 0, n); reverse(nums, 0, k - 1); reverse(nums, k, n); return nums; }