关闭

Rotate Array

标签: leetcode旋转数组
224人阅读 评论(0) 收藏 举报
分类:

Problem

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]. How many different ways do you know to solve this problem?

这道题是旋转数组。大致思路如下:
1.复制数组,最简单的方式。
2.采用类似冒泡排序的方式,每次将最右边一个移到最前面。
3.采用旋转逆序的方式。

talk is cheap,show me the code!

public class RotateArray {

    public static void printArray(int[] array) {
        for(int i=0; i<array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }

    //方法一:复制数组,时间复杂度与空间复杂度均为O(n)
    public static void rotate(int[] nums, int k) {
        if(k > nums.length) {
            k%= nums.length;
        }

        int[] result = new int[nums.length];

        for(int i=0; i<k; i++) {
            result[i] = nums[nums.length-k+i];
        }

        int j = 0;
        for(int i=k; i<nums.length; i++) {
            result[i] = nums[j];
            j++;
        }

        System.arraycopy(result,0,nums,0,nums.length);
    }

    //方法二:类似于冒泡排序,时间复杂度O(nk),空间复杂度O(1)
    public static void bubble_rotate(int[] nums, int k) {
        if(nums == null || k < 0) {
            throw new IllegalArgumentException("Illegal argument!");
        }

        for(int i=0; i<k; i++) {
            for(int j=nums.length-1; j>0; j--) {
                int tmp = nums[j];
                nums[j] = nums[j-1];
                nums[j-1] = tmp;
            }
        }
    }

    //方法三:逆序的方式,时间复杂度O(n),空间复杂度O(1)
    public static void reverse_rotate(int[] nums, int k) {
        if(nums == null || k < 0) {
            throw new IllegalArgumentException("Illegal argument!");
        }

        reverse_array(nums,0,k-1);
        reverse_array(nums,k,nums.length-1);
        reverse_array(nums,0,nums.length-1);
    }

    public static void reverse_array(int[] array, int left, int right) {
        if (array == null || array.length == 0 || left < 0 || right < 0) {
            throw new IllegalArgumentException("Illegal argument!");
        }

        while(left < right) {
            int tmp = array[left];
            array[left] = array[right];
            array[right] = tmp;
            left++;
            right--;
        }
    }

    public static void main(String[] args) {
        int[] nums = {1,2,3,4,5,6,7};
        reverse_rotate(nums,3);
        printArray(nums);
    }
}
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

【LeetCode-面试算法经典-Java实现】【189-Rotate Array(旋转数组)】

【189-Rotate Array(旋转数组)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Rotate an array of n elements to the r...
  • DERRANTCM
  • DERRANTCM
  • 2015-08-24 07:13
  • 3042

Collections类中常用算法之Rotate

Collections类中常用算法之Rotate Collections类中常用算法之Rotate Collections类简介 Rotate方法使用 Rotate方法源码分析 小结Collectio...
  • u014532901
  • u014532901
  • 2016-10-23 14:26
  • 1375

神奇的rotate函数

我要给大家介绍一种神奇的rotate或者说数组翻转函数。
  • esir82
  • esir82
  • 2016-08-25 07:34
  • 779

STL实现细节之rotate()

STL中 rotate(first, middle, last) 函数的作用是原地把容器区间 [first, middle)(左半部分) 与 [middle, last) (右半部分)的元素互换。 ...
  • qmickecs
  • qmickecs
  • 2017-04-26 19:45
  • 781

OpenCV代码提取:rotate函数的实现

OpenCV代码提取:rotate函数的实现
  • fengbingchun
  • fengbingchun
  • 2016-07-16 12:34
  • 6249

RotateDrawable的简单使用

本篇博客主要介绍RotateDrawable的简单用法。
  • u011043551
  • u011043551
  • 2017-03-12 16:02
  • 795

【STL源码剖析读书笔记】【第6章】算法之rotate算法

1、  rorate函数将[first, middle)内的元素和[middle, last)内的元素互换,middle所指元素成为容器的第一个元素。rotate函数为了追求效率,根据迭代器的移动能力...
  • ruan875417
  • ruan875417
  • 2015-05-24 14:03
  • 549

图片旋转总结

之前有做过一个浏览器上看到的图片效果不正,需要旋转图片,于是就做了一下图片的旋转功能,图片旋转分成两个步骤。 1. 浏览器上先旋转,看效果 ; 2,确定旋转角度,后台原图片旋转。 那就先来说说...
  • u013303551
  • u013303551
  • 2016-07-09 19:23
  • 1493

安卓开发——详解camera.rotate(x,y,z);的旋转方向

我之前的博客有简单介绍camera类的一些简单方法,其中有一个执行旋转操作的方法rotate(x,y,z),关于x,y,z取正负不同值时(x,y,z都是指角度),图像是如何旋转的呢? 下面通过实际效...
  • qq_28484355
  • qq_28484355
  • 2016-02-05 22:13
  • 1929

使用rotate(0)图片边缘锯齿化

1.rotate(0)实现灯笼摇晃特效 2.解决rotate(0)制作动画时边缘锯齿化的问题
  • aiyishengyishi
  • aiyishengyishi
  • 2017-01-18 19:27
  • 523
    个人资料
    • 访问:1363338次
    • 积分:12939
    • 等级:
    • 排名:第1225名
    • 原创:307篇
    • 转载:98篇
    • 译文:1篇
    • 评论:149条
    最新评论