LeetCode-第189题:Rotate Array

题目详情

题目解释

题目的意思是将给定的数组右移k步,超出数组上界的元素填补数组下界空出的位置,如:

nums=[1,2,3,4,5,6,7];k=3;
k=1:nums=[7,1,2,3,4,5,6];
k=2:nums=[6,7,1,2,3,4,5];
k=3:nums=[5,6,7,1,2,3,4].

题目提示尽可能的想出更多的方法。

Java源码

class Solution {
    public void rotate(int[] nums, int k) {
        int arrayLength = nums.length;//数组的长度
        //求实际需要移动的长度,如给的是k=12,实际只需移动12 % arrayLength
        //给的是3,实际只需移动3 % arrayLength
        int actualMove = k % arrayLength;
        //创建一个临时数组用于存放最后的几个元素,因为他们最先被覆盖
        int[] temp = new int[actualMove];
        for(int i=0;i<temp.length;i++){
            temp[i]=nums[arrayLength-actualMove+i];
        }
        //开始移动
        for(int i=arrayLength-actualMove-1;i>=0;i--){
            nums[i+actualMove]=nums[i];
        }
        //将之前临时保存的数组放回nums数组
        for(int i=0;i<temp.length;i++){
            nums[i]=temp[i];
        }
    }
}

其他

posted @ 2017-10-17 09:21  baixiaoshuai  阅读(192)  评论(0编辑  收藏  举报