题解 | #调整牛群的位置#

调整牛群的位置

https://www.nowcoder.com/practice/cfa2130da69449229d8159561d39b0d3

知识点:

反转数组/数组操作/取余数

分析:

两次反转数组

  1. 第一次翻转数组使前n-k个元素移动到后方,后k个元素翻转到前方但内部顺序正好相反
  2. 所以再翻转[0,k-1] [k,n]后即可得到答案
  3. 注意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;
    }

全部评论

相关推荐

深夜书店vv:腾讯是这样的,去年很多走廊都加桌子当工区
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务