LeetCode-189. 轮转数组-Java

目录

1.题目

2.题解

 3.代码

4.复杂度分析


1.题目

给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数

 题目来源:力扣(LeetCode)

2.题解

使用分割翻转法

 3.代码

class Solution {
    public void rotate(int[] nums, int k) {
        k %= nums.length;
        reverse(nums, 0, nums.length - 1);//翻转整个数组元素
        reverse(nums, 0, k -1);//翻转k-1之前的元素
        reverse(nums, k, nums.length - 1);//翻转K之后的数


    }

    public void reverse(int[] nums, int left, int right) {
        while (left < right) {
            int temp = nums[left];
            nums[left] = nums[right];
            nums[right] = temp;
            left += 1;
            right -= 1;

        }
    }
}

4.复杂度分析

时间复杂度:O(n),其中 n 为数组的长度。每个元素被翻转两次,一共 n个元素,因此总时间复杂度为 O(2n)=O(n)O(2n)=O(n)。

空间复杂度:O(1)

猜你喜欢

转载自blog.csdn.net/m0_60494863/article/details/122150459
今日推荐