小编Lin*_* Le的帖子

如何旋转数组?

我有以下问题要测试:

通过k步向右旋转n个元素的数组.

例如,当n = 7且k = 3时,阵列[1,2,3,4,5,6,7]旋转到[5,6,7,1,2,3,4].您知道解决此问题的方式有多少种?

我的中间阵列解决方案:

使用Space is O(n)和time O(n),我可以创建一个新数组,然后将元素复制到新数组.然后使用更改原始数组System.arraycopy().

public void rotate(int[] nums, int k) {
    if(k > nums.length) 
        k=k%nums.length;

    int[] result = new int[nums.length];

    for(int i=0; i < k; i++){
        result[i] = nums[nums.length-k+i];
    }

    int j=0;
    for(int i=k; i<nums.length; i++){
        result[i] = nums[j];
        j++;
    }

    System.arraycopy( result, 0, nums, 0, nums.length );
}
Run Code Online (Sandbox Code Playgroud)

但是,有更好的方法可以通过空间中的气泡旋转(如气泡排序)来实现O(1吗?

java arrays sorting optimization time-complexity

10
推荐指数
2
解决办法
1万
查看次数

标签 统计

arrays ×1

java ×1

optimization ×1

sorting ×1

time-complexity ×1