题目描述:
给定一个整数数组 nums
,将数组中的元素向右轮转 k
个位置,其中 k
是非负数。
示例1:
输入: nums = [1,2,3,4,5,6,7], k = 3
输出:[5,6,7,1,2,3,4]解释:
向右轮转 1 步:[7,1,2,3,4,5,6]向右轮转 2 步:[6,7,1,2,3,4,5]
向右轮转 3 步:
[5,6,7,1,2,3,4]
示例2:
输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]
题目解析:
我们采用反转数组的思想,以示例1为例,如下图:
由于题目没有规定k一定小于n,轮转 n 次等于没有轮转,轮转 n+1 等于轮转 1 次,依此类推,轮转 k 次等于轮转 k % n 次。
实现代码:
class Solution {public void rotate(int[] nums, int k) {int n = nums.length;k %= n;reverse(nums,0,n-1);reverse(nums,0,k-1);reverse(nums,k,n-1);}private void reverse(int[] nums,int i,int j){while(i < j){int temp = nums[i];nums[i] = nums[j];nums[j] = temp;i++;j--;}}
}