leetcode算法練習(xí)- 旋轉(zhuǎn)數(shù)組

給定一個數(shù)組,將數(shù)組中的元素向右移動 k 個位置,其中 k 是非負(fù)數(shù)。

示例 1:

輸入: [1,2,3,4,5,6,7] 和 k = 3
輸出: [5,6,7,1,2,3,4]
解釋:
向右旋轉(zhuǎn) 1 步: [7,1,2,3,4,5,6]
向右旋轉(zhuǎn) 2 步: [6,7,1,2,3,4,5]
向右旋轉(zhuǎn) 3 步: [5,6,7,1,2,3,4]

示例 2:

輸入: [-1,-100,3,99] 和 k = 2
輸出: [3,99,-1,-100]
解釋:
向右旋轉(zhuǎn) 1 步: [99,-1,-100,3]
向右旋轉(zhuǎn) 2 步: [3,99,-1,-100]

說明:
盡可能想出更多的解決方案,至少有三種不同的方法可以解決這個問題。
要求使用空間復(fù)雜度為 O(1) 的原地算法。

第一次提交

想法非常簡單,就是移動一次我就從數(shù)組尾部刪除一個加到數(shù)組前

var rotate = function(nums, k) {
    for(let i=0;i<k;i++){
        const num = nums.pop();
        nums.unshift(num)
    }
};
QQ圖片20190319074118.png

第二次提交

優(yōu)化了一下,數(shù)組長度為1或者數(shù)組長度和k相同的直接返回,移動步數(shù)大于長度的可以求余節(jié)省步數(shù),最后不用一個個操作,直接把移動多少用splice切出來再塞前面

  var rotate = function (nums, k) {
    const length = nums.length;
    if (length === k || length === 1) {
      return nums
    } else {
      if (length < k) {
        k = k % length
      }
      nums.unshift(...nums.splice( - k, k));
    }
  };
QQ圖片20190319075412.png

最優(yōu)解

看了下最優(yōu)解,和我第二次提交用的方法基本是一樣的

var rotate = function(nums, k) {
    let l = nums.length;
    k %= l
    nums.unshift(...nums.splice(nums.length - k, k))
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 字符串匹配KMP算法詳解 1. 引言 以前看過很多次KMP算法,一直覺得很有用,但都沒有搞明白,一方面是網(wǎng)上很少有...
    張晨輝Allen閱讀 2,623評論 0 3
  • 數(shù)組是最簡單的數(shù)據(jù)結(jié)構(gòu),占據(jù)連續(xù)內(nèi)存并且按順序存儲。 以下是與數(shù)組有關(guān)的算法題目。 (1)查詢數(shù)組中重復(fù)數(shù)字 算法...
    頑皮的石頭7788121閱讀 2,169評論 0 0
  • 是誰 打開了冰箱 是誰 搬來了北冰洋 是誰 吹來了北極的風(fēng)霜 寒冷 速凍著東北 肆虐得人們遍體鱗傷 縮進(jìn)大衣里的腳...
    琢玉書生閱讀 557評論 24 62

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