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.

    (1)

    /*
    
     * this solution is so-called three times rotate method
    
     * because (X^TY^T)^T = YX, so we can perform rotate operation three times to get the result
    
     * obviously, the algorithm consumes O(1) space and O(n) time
    
     */
    
    
    
    void rotate(int nums[], int n, int k) {
    
        if (k<=0) return;
    
        k %= n; 
    
        reverseArray(nums, n-k, n-1);
    
        reverseArray(nums, 0, n-k-1);
    
        reverseArray(nums, 0, n-1);    
    
    }

    (2)

    /*
    
     * How to change [0,1,2,3,4,5,6] to [4,5,6,0,1,2,3] by k = 3?
    
     *
    
     * We can change by following rules: 
    
     *
    
     *     [0]->[3], [3]->[6], [6]->[2],  [2]->[5], [5]->[1], [1]->[4]
    
     *    
    
     *
    
     */
    
    void rotate(int nums[], int n, int k) {
    
        if (k<=0) return;
    
        k %= n;
    
        int currIdx=0, newIdx=k;
    
        int tmp1 = nums[currIdx], tmp2; 
    
        int origin = 0;
    
    
    
        for(int i=0; i<n; i++){
    
    
    
            tmp2 = nums[newIdx];
    
            nums[newIdx] = tmp1;
    
            tmp1 = tmp2; 
    
    
    
            currIdx = newIdx;
    
    
    
            //if we meet a circle, move the next one
    
            if (origin == currIdx) {
    
                origin = ++currIdx;
    
                tmp1 = nums[currIdx];
    
            }
    
            newIdx = (currIdx + k) % n;
    
    
    
        } 
    
    }
  • 相关阅读:
    Excel用FREQUENCY统计数值的在指定区间内出现频率
    vim 中的 使用进阶
    sed 处理 多个文件的问题
    在 centos6.4 上编译 mysql 源代码安装数据库
    hadoop 上跑 python job 引入 第三方依赖的解决办法
    关于hadoop的学习笔记
    Gcc的一些参数说明
    makefile 的一些常识
    哈希表

  • 原文地址:https://www.cnblogs.com/argenbarbie/p/5801695.html
Copyright © 2011-2022 走看看