rotate array--JavaScript

来源:互联网 发布:java微信卡券开发实例 编辑:程序博客网 时间:2024/05/16 11:38

首先想到的思路很简单,先将数组reverse,然后再将前k个reverse,最后将后n-k个reverse。而对于k>n的情况,用k=k%n解决。

var rotate = function(nums, k) {
    n=k=k%nums.length;
    if(k==0) nums=nums;
    else{
        for(i=0;i<nums.length/2;i++){   //all reverse
            temp=nums[i];
            nums[i]=nums[nums.length-1-i];
            nums[nums.length-1-i]=temp;
        }
        for(i=0;i<k/2;i++){  // 前k个reverse
            temp=nums[i];
            nums[i]=nums[k-1-i];
            nums[k-1-i]=temp;
        }
        for(i=0;i<Math.ceil((nums.length-n)/2);i++){   //后面 reverse
            if(k<nums.length-1){
                temp=nums[k];
                nums[k]=nums[nums.length-i-1];
                nums[nums.length-i-1]=temp;
                k++;
            }
        }
    }
};

注意:反转循环时的判断条件要除以2!!当逻辑不太清楚时,直接多使用几个变量表示好了。。。

0 0
原创粉丝点击