轮转数组00

2023-12-13 16:04:22

题目链接

轮转数组

题目描述

注意点

  • 使用空间复杂度为 O(1) 的 原地 算法解决这个问题

解答思路

  • 本题有多种思路,一种是复制nums数组,然后将k个位置后的值赋值给当前位置即可,但是空间复杂度为O(n)
  • 还有一种思路是先将整个数组进行翻转,再将(0, k - 1)和(k, n)之间的数组各自进行翻转,最后得到的数组就是结果

代码

class Solution {
    public void rotate(int[] nums, int k) {
        int n = nums.length;
        k = k % n;
        reverse(nums, 0, n - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, n - 1);
    }

    public void reverse(int[] nums, int start, int end) {
        while (start < end) {
            int tmp = nums[start];
            nums[start] = nums[end];
            nums[end] = tmp;
            start++;
            end--;
        }
    }
}

关键点

  • 先将整个数组进行翻转,将后面k个数字移动前方,前面n - k个数字移到后方,再将这两部分分别进行翻转,保证顺序不变

文章来源:https://blog.csdn.net/weixin_51628158/article/details/134924712
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。