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].

    1 2 7 4 5 6 3
    1 6 7 4 5 2 3
    5 6 7 4 1 2 3

    Note:
    Try to come up as many solutions as you can,
    there are at least 3 different ways to solve this problem.

    [show hint]

    Related problem: Reverse Words in a String II

     1 /*************************************************************************
     2     > File Name: LeetCode189.c
     3     > Author: Juntaran
     4     > Mail: Juntaranmail@gmail.com
     5     > Created Time: Tue 13 May 2016 16:27:23 PM CST
     6  ************************************************************************/
     7 
     8 /*************************************************************************
     9 
    10     Rotate Array
    11 
    12     Rotate an array of n elements to the right by k steps.
    13 
    14     For example, with n = 7 and k = 3,
    15     the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].
    16 
    17     1 2 7 4 5 6 3
    18     1 6 7 4 5 2 3
    19     5 6 7 4 1 2 3
    20 
    21     Note:
    22     Try to come up as many solutions as you can,
    23     there are at least 3 different ways to solve this problem.
    24 
    25     [show hint]
    26 
    27     Related problem: Reverse Words in a String II
    28 
    29  ************************************************************************/
    30 
    31 #include <stdio.h>
    32 
    33 void printNums( int* nums, int numsSize )
    34 {
    35     int i;
    36     for( i=0; i<numsSize; i++ )
    37     {
    38         printf("%d ",nums[i]);
    39     }
    40     printf("
    ");
    41 }
    42 
    43 void rotate(int* nums, int numsSize, int k)
    44 {
    45     k = k % numsSize;
    46     if(k == 0)
    47     {
    48         return;
    49     }
    50     int temp = 0;
    51     int left = 0;
    52     int right = numsSize-k;
    53     int n = numsSize - 1;
    54     while( n > 0 )
    55     {
    56         if( left == right )
    57         {
    58             right ++;
    59             left = right + k - numsSize;
    60             n --;
    61         }
    62         
    63         temp = nums[right];
    64         nums[right] = nums[left];
    65         nums[left] = temp;
    66         left = (left + k) %  numsSize;
    67         
    68         n --;
    69         
    70 //        printNums( nums, numsSize );
    71     }
    72 }
    73 
    74 void rotate2(int* nums, int numsSize, int k)
    75 {
    76     while( k > 0 )
    77     {
    78         int temp = nums[numsSize-1];
    79         int i;
    80         for( i=numsSize-1; i>0; i-- )
    81         {
    82             nums[i] = nums[i-1];
    83 //            printNums( nums, numsSize );
    84         }
    85         nums[0] = temp;
    86         k--;
    87 //        printNums( nums, numsSize );
    88     }
    89 }
    90 
    91 int main()
    92 {
    93     int nums[] = {1,2,3,4,5,6};
    94     int numsSize = 6;
    95     int k = 2;
    96     rotate2( nums, numsSize, k );
    97 
    98     return 0;
    99 }
  • 相关阅读:
    UVALive4727:jump
    UVALive
    UVA11795 Mega Man's Mission
    UVA4731:Cellular Network
    UVA11404:Palindromic Subsequence
    设计思路
    阅读计划
    上课未完成代码原因
    《人月神话》读后感
    《软件工程》第十一章总结
  • 原文地址:https://www.cnblogs.com/Juntaran/p/5511683.html
Copyright © 2011-2022 走看看