给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
进阶:
尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?
翻转数组法
翻转数组其实就是头尾指针互换元素,然后头尾指针向中间遍历,如此循环。我们需要旋转数组,其实只需要做三次旋转即可。
执行用时0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:55.3 MB, 在所有 Java 提交中击败了38.26%的用户
通过测试用例:8 / 38
class Solution { public void rotate(int[] nums, int k) { if (nums.length <= k) { k = k % nums.length; } reverseOrder(nums, 0, nums.length - 1); reverseOrder(nums, 0, k - 1); reverseOrder(nums, k, nums.length - 1); } public void reverseOrder(int[] nums, int start, int end) { while (start < end) { int temp = nums[start]; nums[start] = nums[end]; nums[end] = temp; start += 1; end -= 1; } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)