zoukankan      html  css  js  c++  java
  • Leetcode 189 Rotate Array stl

    题意:将数组旋转k次,如将数组[1,2,3,4,5]旋转1次得到[2,3,4,5,1],将数组[1,2,3,4,5]旋转2次得到[3,4,5,1,2].....

    本质是将数组分成两部分a1,a2,...ak以及ak+1....an两部分,然后将两部分进行交换。

    我的解法是将数组分成两部分a1,a2,.....an-k-1以及an-k,.....an,然后将两部分分别反转得到数组ank-1,.....,a2,a1,an......an-k

    然后将这个数组反转得到an-k,.....an,a1,a2,....ank-1。

    这个算法复杂度为O(n),空间复杂度O(1).

     1 class Solution {
     2 public:
     3     void rotate(vector<int>& nums, int k) {
     4         if(nums.size() == 0) return; 
     5         k %= nums.size();
     6         if(0 == k) return;
     7         reverse(nums.begin(), nums.end() - k);
     8         reverse(nums.end() - k, nums.end());
     9         reverse(nums.begin(), nums.end());
    10     }
    11 };
  • 相关阅读:
    Portable Executable 可移植可执行
    汇编跳转指令
    Java中this和super
    Java成员变量和类变量
    EasyUI select
    JAVA虚函数
    感想
    函数
    ueditor
    gitlab简介配置和参数修改
  • 原文地址:https://www.cnblogs.com/onlyac/p/5511911.html
Copyright © 2011-2022 走看看