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 }
原文地址:https://www.cnblogs.com/Juntaran/p/5511683.html