189. Rotate Array:将数组后k个元素放到前面

将数组后k个元素放到前面
注意:当k的值比n的值大的时候,是按照如下规律
【1,2,3】k=5
3-5=-2,从右往左两位等同于k=2
【2,3,1】


  • java

1)使用reverse的思想:
【1,2,3,4,5,6,7】,k=2
先反转【7,6,5,4,3,2,1】
前k位反转 【6,7,5,4,3,2,1】
后面n-k位反转【6,7,1,2,3,4,5】

class Solution {
    public void rotate(int[] nums, int k) {
        if(nums==null||nums.length==0||k<=0)
             return;
        int n=nums.length;
        List<Integer> list=new ArrayList<>();
        //当k比n大的时候,比如【1,2,3】k=5,5%3=2,等同于k=2【2,3,1】
       if(k>n){
            k=k%n;
        }
        //将数组中所有元素反转
       reverse(nums,0,n-1);
        //将前k项反转
       reverse(nums,0,k-1);
        //将后面元素反转
       reverse(nums,k,n-1);
       
    }
    
   public void reverse(int []nums,int start,int end){
        for(;start<end;start++,end--){
            int temp=nums[start];
            nums[start]=nums[end];
            nums[end]=temp;
        }
    }
}

2)用多余数组实现:

class Solution {
    public void rotate(int[] nums, int k) {
       if(nums==null||nums.length==0||k<=0)
             return;
        int n=nums.length;
        int[] temp=new int[n];
        //当k比n大的时候,比如【1,2,3】k=5,3-5=-2,等同于k=2【2,3,1】
         if(k>n){
            k=k%n;
        }
       
        for(int i=n-k,j=0;i<n&&j<k;i++,j++){
               temp[j]=nums[i];
           }
        for(int i=0,j=k;i<n-k&&j<n;i++,j++){
               temp[j]=nums[i];
          }    
        for(int i=0;i<n;i++){
                nums[i]=temp[i];
        }
         
    }
}

3)用多余list实现:

class Solution {
    public void rotate(int[] nums, int k) {
    if(nums==null||nums.length==0||k<=0)
             return;
        int n=nums.length;
        List<Integer> list=new ArrayList<>();
        //当k比n大的时候,比如【1,2,3】k=5,3-5=-2,等同于k=2【2,3,1】
         if(k>n){
            k=k%n;
        }
       
        for(int i=n-k;i<n;i++){
               list.add(nums[i]);
           }
        for(int i=0;i<n-k;i++){
               list.add(nums[i]);
          }
        for(int i=0;i<n;i++){
            nums[i]=list.get(i);
        }
       
    }
}
  • javascript
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var rotate = function(nums, k) {
if(nums==null||nums.length==0||k<=0)
             return;
         var n=nums.length;
         var list=new Array();
        //当k比n大的时候,比如【1,2,3】k=5,3-5=-2,等同于k=2【2,3,1】
         if(k>n){
            k=k%n;
        }
       
        for(var i=n-k;i<n;i++){
               list.push(nums[i]);
           }
        for(var i=0;i<n-k;i++){
               list.push(nums[i]);
          }
        for(var i=0;i<n;i++){
            nums[i]=list[i];
        }
       
    
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,567评论 0 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,001评论 19 139
  • 青春是打开了就合不上的书,人生是踏上了就回不去的路。——题记 有人说不拼搏的青春不叫青春,也有人说不迷茫的青春不叫...
    1f374d491a04阅读 220评论 0 1
  • 花开花落,花落花开,虽说只过了短短一年的时间,大萝卜的人生却走过了几个重要的节点。这一年间,大萝卜大学毕业,人到了...
    故事驿站阅读 281评论 0 0
  • 背景 以前对于留学都有一种憧憬,认为在国外学完之后就很牛了。今天听了小伙伴的分享知道虽然身在澳洲有很多好玩的地方但...
    shawnxjf阅读 275评论 0 0