zoukankan      html  css  js  c++  java
  • 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.

     

    Solution 1: note that line 6 uses k%size. the time complexity of erase is O(n), so the worst total time could be O(n^2)

     1 class Solution {
     2 public:
     3     void rotate(vector<int>& nums, int k) {
     4         int size=nums.size();
     5         int i=0;
     6         while (i<size-k%size){
     7             nums.push_back(nums[0]);
     8             nums.erase(nums.begin());
     9             i++;
    10         }
    11     }
    12 };

    Solution 2:reverse the previous n-k nums and then reverse the later k nums. Finally reverse all. O(n)

    1 2 3 4 5 6 7 

    4321567

    4 3 2 1 7 6 5

    5 6 7 1 2 3 4

     1 class Solution {
     2 public:
     3     void rotate(vector<int>& nums, int k) {
     4         if (nums.empty() || (k %= nums.size()) == 0) return;
     5         int n = nums.size();
     6         reverse(nums.begin(), nums.begin() + n - k);
     7         reverse(nums.begin() + n - k, nums.end());
     8         reverse(nums.begin(), nums.end());
     9     }
    10 };
  • 相关阅读:
    deepin/uos和局域网其他机器无法ping通
    Ubuntu18.04完全卸载vscode
    批量拉取github组织或者用户的仓库
    vmware uos挂载windows共享目录
    清空容器另类方式
    time_t 时间格式化字符串
    条件变量condition_variable
    C++多维堆数组定义
    arm64 ubuntu18.04 bionic安装bcc tools
    win10下载编译chromium
  • 原文地址:https://www.cnblogs.com/anghostcici/p/6917120.html
Copyright © 2011-2022 走看看