public class Solution {
    public void reverse(int[] nums, int start, int end)
        {
            while (start < end)
            {
                int temp = nums[start];
                nums[start] = nums[end];
                nums[end] = temp;
                start++;
                end--;
            }
        }

        public void Rotate(int[] nums, int k)
        {
            k %= nums.Length;
            reverse(nums, 0, nums.Length - 1);
            reverse(nums, 0, k - 1);
            reverse(nums, k, nums.Length - 1);
        }
}

https://leetcode.com/problems/rotate-array/#/description

 

 补充一个python的实现:

 1 class Solution:
 2     def rotate(self, nums: 'List[int]', k: int) -> None:
 3         """
 4         Do not return anything, modify nums in-place instead.
 5         """
 6         n = len(nums)#获取原数组的长度
 7         #将原数组用切片分两部分
 8         part1 = nums[n-k:]#右半部分,从第n-k个元素开始,到最后一个元素
 9         part2 = nums[:n-k]#右半部分,从第0个元素开始,到第n-k-1个元素
10         nums.clear()#将原数组清空
11         nums.extend(part1)#空数组先拼接右半数组
12         nums.extend(part2)#空数组再拼接左半数组

 

Java版代码

 1 class Solution {
 2     public void reverse(int[] nums, int start, int end){
 3         while (start < end)
 4         {
 5             int temp = nums[start];
 6             nums[start] = nums[end];
 7             nums[end] = temp;
 8             start++;
 9             end--;
10         }
11     }
12     public void rotate(int[] nums, int k) {
13         k %= nums.length;
14         reverse(nums, 0, nums.length - 1);
15         reverse(nums, 0, k - 1);
16         reverse(nums, k, nums.length - 1);
17     }
18 }

 

posted on 2017-04-26 21:45  Sempron2800+  阅读(124)  评论(0编辑  收藏  举报