189. Rotate Array:將數(shù)組后k個(gè)元素放到前面

將數(shù)組后k個(gè)元素放到前面
注意:當(dāng)k的值比n的值大的時(shí)候,是按照如下規(guī)律
【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
先反轉(zhuǎn)【7,6,5,4,3,2,1】
前k位反轉(zhuǎn) 【6,7,5,4,3,2,1】
后面n-k位反轉(zhuǎn)【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<>();
        //當(dāng)k比n大的時(shí)候,比如【1,2,3】k=5,5%3=2,等同于k=2【2,3,1】
       if(k>n){
            k=k%n;
        }
        //將數(shù)組中所有元素反轉(zhuǎn)
       reverse(nums,0,n-1);
        //將前k項(xiàng)反轉(zhuǎn)
       reverse(nums,0,k-1);
        //將后面元素反轉(zhuǎn)
       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)用多余數(shù)組實(shí)現(xiàn):

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];
        //當(dāng)k比n大的時(shí)候,比如【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)用多余l(xiāng)ist實(shí)現(xiàn):

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<>();
        //當(dāng)k比n大的時(shí)候,比如【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();
        //當(dāng)k比n大的時(shí)候,比如【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];
        }
       
    
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,295評(píng)論 0 17
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 青春是打開了就合不上的書,人生是踏上了就回不去的路?!}記 有人說(shuō)不拼搏的青春不叫青春,也有人說(shuō)不迷茫的青春不叫...
    1f374d491a04閱讀 233評(píng)論 0 1
  • 花開花落,花落花開,雖說(shuō)只過(guò)了短短一年的時(shí)間,大蘿卜的人生卻走過(guò)了幾個(gè)重要的節(jié)點(diǎn)。這一年間,大蘿卜大學(xué)畢業(yè),人到了...
    故事驛站閱讀 301評(píng)論 0 0
  • 背景 以前對(duì)于留學(xué)都有一種憧憬,認(rèn)為在國(guó)外學(xué)完之后就很牛了。今天聽了小伙伴的分享知道雖然身在澳洲有很多好玩的地方但...
    shawnxjf閱讀 292評(píng)論 0 0

友情鏈接更多精彩內(nèi)容