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;
    
    
    
        } 
    
    }
  • 相关阅读:
    redis 内部数据结构 quicklist
    redis 七种内部数据结构
    魔漫相机
    情绪识别API
    AdressBook通讯录
    单例
    UI控件---UINavigationController导航栏控制器
    UI控件之UIScrollView
    UIScrollViewDelegate协议方法概述
    代理设计模式---传值
  • 原文地址:https://www.cnblogs.com/argenbarbie/p/5801695.html
Copyright © 2011-2022 走看看