leetcode Rotate Array【数组】

题目链接:https://leetcode.com/problems/rotate-array/

 1 /*题意:将数组向右旋转k个位置*/
 2 
 3 /*
 4  *三次翻转数组,第一次翻转整个数组,第二次翻转前k个数,第三次翻转剩下的数
 5  *第一次翻转:7,6,5,4,3,2,1
 6  *第二次翻转:5,6,7,4,3,2,1
 7  *第三次翻转:5,6,7,1,2,3,4
 8  *
 9  *时间复杂度,空间复杂度都为O(n)
10  */
11 
12 class Solution {
13 public:
14     void rotate(int nums[], int n, int k) {
15         k = k%n;                //一定要注意,k可能比n大
16         reverse(nums, 0, n-1);
17         reverse(nums, 0, k-1);
18         reverse(nums, k, n-1);
19     }
20     void reverse(int A[], int s, int e) {
21         while(s < e) {
22             swap(A[s], A[e]);
23             s ++; 
24             e --;
25         }
26     }
27 
28 };

 

posted @ 2015-03-23 20:27  天丶下  阅读(214)  评论(0编辑  收藏  举报