zoukankan      html  css  js  c++  java
  • OJ练习36——T189 Rotate Array

    把数组做给定次数的rotate操作。

    rotate一次:即把末尾的元素放到开头,将其他的元素循环右移一个单位。

    【思路】

    1.再开个空间,将末尾的k个元素按从前到后的顺序放在新数组的开头,再将原数组剩下的元素按从前到后的顺序赋给新数组剩下的空间。

    节省了时间复杂度,增加了空间复杂度。

    2.顺向思维,每次处理一次rotate,将最后的元素冒泡到开头。时间复杂度太高。

    3.用交换代替rotate,将数组以K分为两半,前半段做翻转,后半段做翻转,最后整体做翻转,时间复杂度和空间复杂度均为最低。

    【my code】

    void rotate(int nums[], int n, int k) {
            int k1=k%n;
            reverse(nums, 0, n-k1-1);
            reverse(nums, n-k1, n-1);
            reverse(nums, 0, n-1);
        }
        void reverse(int nums[], int l, int h){
            //交换代替翻转
            int temp;
            int mid=(l+h)/2;
            for(int i=l; i<=mid; i++){
                temp=nums[i];
                nums[i]=nums[h-i+l];
                nums[h-i+l]=temp;
            }
        }

    【后记】

    耗时27ms,排名靠前。

    所以说,以前学到的算法还是有用的,不经意就会想起来。

  • 相关阅读:
    毒丸模式【其他模式】
    对象池模式【其他模式】
    双重校验锁模式【其他模式】
    回调模式【其他模式】
    命令模式【行为模式】
    备忘录模式【行为模式】
    Linux
    Cassandra Package installation directories
    cqlsh script
    Spring boot cassandra
  • 原文地址:https://www.cnblogs.com/ketchups-notes/p/4466116.html
Copyright © 2011-2022 走看看