本文共 593 字,大约阅读时间需要 1 分钟。
给定一个数组 A A A,再给定一个数 k k k,要求将数组右移 k k k位。右移的意思是,每个数字向右挪动 k k k步,如果出界了,就依次再加到数组左边,继续挪。
先将 k k k模掉 A A A的长度,接着只需要三步翻转即可。代码如下:
public class Solution { 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); } public void reverse(int[] nums, int i, int j) { for (; i < j; i++, j--) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } }}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。
转载地址:http://vocs.baihongyu.com/