LC 旋转数组
Posted yangbocsu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LC 旋转数组相关的知识,希望对你有一定的参考价值。
LC 旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
进阶:
- 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
- 你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?
思路一: 先实现移动数组的最后一位,再套一个循环移动k次
class Solution {
public void rotate(int[] nums, int k)
{
int length = nums.length;
if (nums == null || length == 0)//边界处理
{
return;
}
k= k % length;
for (int i = 0; i < k; i++)
{
int temp = nums[length - 1];
for (int j = length - 1; j >0; j--)//移动一位
{
nums[j] = nums[j -1];
}
nums[0] = temp;
}
}
}
思路没有问题,但是超时了!!! 当数据量小的时候没有问题,但是数据量大的时候就有问题了。
思路二: 创立一个新数组,先将数组的后k位移到新数组,再移剩下的数组;
class Solution {
public void rotate(int[] nums, int k)
{
int length = nums.length;
if (nums == null || length == 0)
{
return;
}
k= k % length;
int[] arr = new int[length];//临时新数组
//先移动num[]的后k位;
for (int i = length-k,j=0; i<length; i++,j++)
{
arr[j] = nums[i];
}
//再移动剩下的
for (int i = 0,j=k; j < length; i++,j++)
{
arr[j] = nums[i];
}
//将移好后顺序 置于 num[]
for (int i = 0; i < length; i++)
{
nums[i] = arr[i];
}
}
}
这次虽然没有超时,但是内存消耗比较大。
看官方的:
以上是关于LC 旋转数组的主要内容,如果未能解决你的问题,请参考以下文章