本文共 975 字,大约阅读时间需要 3 分钟。
旋转数组的问题可以通过分段反转的方法高效地解决,这种方法不仅满足在原地操作的要求,还能保证额外空间的占用最低。以下是详细的解决方案和实现步骤。
为了在原地旋转数组,我们可以利用分段反转的方法。具体步骤如下:
这种方法的时间复杂度为O(n),空间复杂度为O(1),非常适合处理大数组且内存有限的场景。
public class Solution { public void rotate(int[] nums, int k) { if (nums == null || nums.length == 0) return; int n = nums.length; k %= n; if (k == 0) return; reverse(nums, 0, n - k - 1); reverse(nums, n - k, n - 1); reverse(nums, 0, n - 1); } private void reverse(int[] nums, int start, int end) { while (start <= end) { int temp = nums[start]; nums[start] = nums[end]; nums[end] = temp; start++; end--; } }}
这种方法通过多次反转不同区间,实现了数组的旋转操作,保证了在原地完成任务,并且空间复杂度为O(1),非常高效。
转载地址:http://esgfk.baihongyu.com/