• 189. Rotate Array


    1. 问题描述

    189. Rotate Array
    Rotate an array of n elements to the right by k steps.
    For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].
    Note:
    Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
    Hint:
    Could you do it in-place with O(1) extra space?
    Related problem: Reverse Words in a String II
    Tags: Array
    Similar Problems: (M) Rotate List (M) Reverse Words in a String II

    2. 解题思路


    3. 代码

    #include <algorithm>
    class Solution {
    public:
        void rotate_1(vector<int>& nums, int k) 
        {
            int vSize = nums.size();
            k = k % vSize;
            for (int i=0; i<vSize/2; i++)
            {
                int t = nums[i];
                nums[i] = nums[vSize-1-i];
                nums[vSize-1-i] = t;
            }
    
            for (int i=0; i<k/2; i++)
            {
                int t = nums[i];
                nums[i] = nums[k-1-i];
                nums[k-1-i] = t;
            }
    
            for (int i=k; i<k + (vSize-k)/2; i++)
            {
                int t = nums[i];
                nums[i] = nums[vSize-1-i+k];
                nums[vSize-1-i+k] = t;
            }
        }
    
        void rotate_2(vector<int>& nums, int k)//使用reverse()函数需引入#include <algorithm>
        {
            k = k % nums.size();
            reverse(nums.begin(), nums.end());
            reverse(nums.begin(), nums.begin()+k);
            reverse(nums.begin()+k, nums.end());
        }
    };


    4. 反思

  • 相关阅读:
    08-12 NOIP模拟测试18
    08-09 NOIP模拟测试15
    08-11 NOIP模拟测试17
    08-10 NOIP模拟测试16
    08-07 NOIP模拟测试14
    08-03 NOIP模拟测试12
    [SDOI2011]拦截导弹
    08-01 NOIP模拟测试11
    零散知识点
    07-29 NOIP模拟测试10
  • 原文地址:https://www.cnblogs.com/whl2012/p/5860717.html
Copyright © 2020-2023  润新知