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)#空数组再拼接左半数组
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 }