【Leetcode】189. 旋转数组

【Leetcode】189. 旋转数组,第1张

【Leetcode】189. 旋转数组 题目描述

给定一个数组,将数组中的元素向右移动 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;
        }
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5077267.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存