zoukankan      html  css  js  c++  java
  • 189.旋转数组

    给定一个数组,将数组中的元素向右移动 个位置,其中 是非负数。

    示例 1:

    输入: [1,2,3,4,5,6,7]k = 3
    输出: [5,6,7,1,2,3,4]
    解释:
    向右旋转 1 步: [7,1,2,3,4,5,6]
    向右旋转 2 步: [6,7,1,2,3,4,5]
    向右旋转 3 步: [5,6,7,1,2,3,4]
    

    第一个方法:152 ms

    void rotate(vector<int>& nums, int k) {
            int size = nums.size();
            int index = 0;
            k = k % size;
            int temp = 0;
            for(int i=size-k ; i<size ; ++i, ++index)
            {
                temp = nums[i];
                for(int j=index + size - k ; j > index ; --j)
                {
                    nums[j] = nums[j-1];
                }
                nums[index] = temp;
            }
        }

    采用库函数:

    tmp = nums.back();
    nums.pop_back();
    nums.insert(nums.begin(), tmp);

    大神方法:

    对两边分别做倒转,最后再对所有倒转。

    void rotate(vector<int>& nums, int k) 
        {
            if (nums.size() == 0) {
                return;
            }
            
            k = k % nums.size();
            reverse(nums, 0, nums.size() - k - 1);
            reverse(nums, nums.size() - k, nums.size() - 1);
            reverse(nums, 0, nums.size() - 1);   
        }
        
    void reverse(vector<int>& nums, int start, int end) {
            while (start < end) {
                int temp = nums[start];
                nums[start] = nums[end];
                nums[end] = temp;
                ++start; 
                --end;
            }
        }
            

    也可以先对整个倒转,再对两边倒转

    void rotate(vector<int>& nums, int k) {
            k = k % nums.size();
            reverse(nums, 0, nums.size() - 1);
             reverse(nums, 0, k - 1);
            reverse(nums, k, nums.size() - 1);
        }
  • 相关阅读:
    maven配置成功,但显示'cmd' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
    java ee 4周
    java 3周
    XML
    web后台过程
    【转】Maven详细
    HDFS 客户端读写操作详情
    HDFS DataNode详解
    HDFS NameNode详解
    CSS的四种样式
  • 原文地址:https://www.cnblogs.com/jimobuwu/p/8982186.html
Copyright © 2011-2022 走看看