zoukankan      html  css  js  c++  java
  • LeetCode 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.

    [show hint]

    Hint:
    Could you do it in-place with O(1) extra space?

    Related problem: Reverse Words in a String II


    题目标签:Array

      题目给了我们一个数组 和 k。 让我们 旋转数组 k 次。

      这里有一个很巧妙的方法:

        利用数组的length - k 把数组 分为两半;

        reverse 左边和右边的数组;

        reverse 总数组。

      举一个例子: 

      1 2 3 4 5 6 7  如果k = 3 的话, 会变成 5 6 7 1 2 3 4

      1 2 3 4 5 6 7  middle = 7 - 3 = 4,分为左边 4个数字,右边 3个数字

      4 3 2 1 7 6 5  分别把左右reverse 一下

      5 6 7 1 2 3 4  把总数组reverse 一下就会得到答案

    Java Solution:

    Runtime beats 15.37% 

    完成日期:04/13/2017

    关键词:Array

    关键点:利用k把数组分两半;reverse左右两边数组;reverse总数组

     1 public class Solution 
     2 {
     3     public void rotate(int[] nums, int k) 
     4     {
     5         if(nums == null || nums.length == 0 || k % nums.length == 0)
     6             return;
     7         
     8         int turns = k % nums.length;
     9         int middle = nums.length - turns;
    10         
    11         reverse(nums, 0, middle-1); // reverse left part
    12         reverse(nums, middle, nums.length-1); // reverse right part
    13         reverse(nums, 0, nums.length-1); // reverse whole part 
    14     }
    15     
    16     public void reverse(int[] arr, int s, int e)
    17     {
    18         while(s < e)
    19         {
    20             int temp = arr[s];
    21             arr[s] = arr[e];
    22             arr[e] = temp;
    23             
    24             s++;
    25             e--;
    26         }
    27     }
    28 }

    参考资料:

    http://www.cnblogs.com/grandyang/p/4298711.html

     

    LeetCode 算法题目列表 - LeetCode Algorithms Questions List

  • 相关阅读:
    Linux下yum安装mysql
    centos下无法使用lsof命令"-bash: lsof: command not found"
    大数据与区块链的联系与区别
    java.lang.NullPointerException报错的几种情况
    算法概述
    区块链简史
    word导出失败问题
    [Python3网络爬虫开发实战] 1.9.5-Scrapyrt的安装
    [Python3网络爬虫开发实战] 1.9.3-Scrapyd-Client的安装
    [Python3网络爬虫开发实战] 1.9.2-Scrapyd的安装
  • 原文地址:https://www.cnblogs.com/jimmycheng/p/7476681.html
Copyright © 2011-2022 走看看