亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

javascript算法之數(shù)組反轉

 更新時間:2022年08月11日 11:14:09   作者:乾復道  
這篇文章主要介紹了javascript算法之數(shù)組反轉,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

1.數(shù)組反轉

1.1 leecode題目-旋轉數(shù)組

給你一個數(shù)組,將數(shù)組中的元素向右輪轉 k 個位置,其中 k 是非負數(shù)。

示例:

輸入: nums = [1,2,3,4,5,6,7], k = 3
輸出: [5,6,7,1,2,3,4]
解釋:
向右輪轉 1 步: [7,1,2,3,4,5,6]
向右輪轉 2 步: [6,7,1,2,3,4,5]
向右輪轉 3 步: [5,6,7,1,2,3,4]

1.2 分析題目

  • 數(shù)組元素有序輪轉,即輪轉位置k,意味著,每個元素向后移k位,且長度n-k~n-1位置的元素會被挪移至最前方;
  • k為非負整數(shù),所以,不存在向左輪轉;

1.3解題思路

在不使用額外數(shù)組的前提下,我們可以有如下思考, 設數(shù)組長度為length,則

  • 需要輪轉k位,即數(shù)組的最后k位會進行挪移至數(shù)組前方,即,當我們反轉數(shù)組后,可以得知[0,k-1],[k,lenth-1]這兩個數(shù)組,即為輪轉之后的對應數(shù)組,但是,兩個數(shù)組中的元素排序是反的;
  • 接下來,依次反轉[0,k-1],[k,lenth-1],這兩個數(shù)組,得到的數(shù)組就是答案了

1.4 代碼

const reverseArray = (nums, start, end) => {
  while (start < end) {
    const temp = nums[start];
    nums[start] = nums[end];
    nums[end] = temp;
    start += 1;
    end -= 1;
  }
  return nums;
};
var reverseFunction = function(nums, k) {
  let length  = nums.length;
  nums = reverseArray(nums, 0, length - 1);
  nums = reverseArray(nums, 0, k - 1);
  nums = reverseArray(nums, k, length - 1);
};
reverseFunction([1,2,3,4,5,6,7],3);

輸出:[5,6,7,1,2,3,4]

1.5 復雜度分析

  • 時間復雜度:時間復雜度:O(n),其中 nn 為數(shù)組的長度。每個元素被翻轉兩次,一共 n 個元素,因此總時間復雜度為 O(2n)=O(n)。
  • 空間復雜度:O(1)。只需要常數(shù)空間存放若干變量。

1.6 其他解法

思路:

  • 既然輪轉k位,即[length-1-k,length-1]位置的元素變?yōu)閇0,k-1]
  • [0,length-1-k]位置的元素變?yōu)閇length-1-k,length-1]
  • 所以我們只需要將原數(shù)組拆分為[0,k-1],[length-1-k,length-1],然后將其按照[length-1-k,length-1]+[0,k-1]組裝成一個數(shù)組即可

代碼:

var reverseFunction2 = function(nums, k) {
  let length  = nums.length;
  let arrayLeft = nums.slice(0,length-k);
  let arrayRight = nums.slice(length-k);
  // return [...new Set([...arrayRight,...arrayLeft])];
  return arrayRight.concat(arrayLeft);
};
reverseFunction2([1,2,3,4,5,6,7],3);

大家會發(fā)現(xiàn)上述代碼中,我注釋了一行,因為,絕對誘人會想使用new Set方法去合并兩個數(shù)組,那么,請注意,千萬不能使用,因為,new Set方法,會講兩個數(shù)組進行合并后去重,如果原數(shù)組中出現(xiàn)相同元素,則,new Set將會給使用者狠狠上一課!

總結

算法的邏輯不同的人有不同的想法,但是殊途同歸,答案是一致的,前提是,一定要靠清楚問題,仔細分析,驗證的時候也要考慮各種情況。

到此這篇關于javascript算法之數(shù)組反轉的文章就介紹到這了,更多相關javascript數(shù)組反轉內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • three.js開發(fā)3d地圖的實現(xiàn)示例

    three.js開發(fā)3d地圖的實現(xiàn)示例

    本文主要介紹了three.js開發(fā)3d地圖的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • JS邏輯運算符短路操作實例分析

    JS邏輯運算符短路操作實例分析

    這篇文章主要介紹了JS邏輯運算符短路操作,結合實例形式分析了javascript三個邏輯運算符短路操作的原理與使用技巧,需要的朋友可以參考下
    2018-07-07
  • JS函數(shù)(普通函數(shù),箭頭函數(shù))中this的指向問題詳解

    JS函數(shù)(普通函數(shù),箭頭函數(shù))中this的指向問題詳解

    這篇文章主要給大家介紹了JS中普通函數(shù)和箭頭函數(shù)的this指向,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-09-09
  • 用函數(shù)模板,寫一個簡單高效的 JSON 查詢器的方法介紹

    用函數(shù)模板,寫一個簡單高效的 JSON 查詢器的方法介紹

    本篇文章小編將為大家介紹,用函數(shù)模板,寫一個簡單高效的 JSON 查詢器的方法介紹,需要的朋友可以參考一下
    2013-04-04
  • JavaScript通過極大極小值算法實現(xiàn)AI井字棋游戲

    JavaScript通過極大極小值算法實現(xiàn)AI井字棋游戲

    極小極大值搜索算法是一種零和算法,是用來最小化對手的利益,最大化自己的利益的算法。極小極大之搜索算法常用于棋類游戲等雙方較量的游戲和程序,算是一種電腦AI算法。本文將介紹通過這個算法實現(xiàn)的一個井字棋游戲,需要的可以參考一下
    2021-12-12
  • js怎么判斷是否是數(shù)組的六種方法小結

    js怎么判斷是否是數(shù)組的六種方法小結

    本文主要介紹了js怎么判斷是否是數(shù)組的六種方法小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • JavaScript代碼性能優(yōu)化總結(推薦)

    JavaScript代碼性能優(yōu)化總結(推薦)

    下面小編就為大家?guī)硪黄狫avaScript代碼性能優(yōu)化總結(推薦)。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧,祝大家游戲愉快哦
    2016-05-05
  • MVVM模式中ViewModel和View、Model有什么區(qū)別?

    MVVM模式中ViewModel和View、Model有什么區(qū)別?

    這篇文章主要介紹了MVVM模式中ViewModel和View、Model有什么區(qū)別?本文分別解釋了它們的功能和作用,然后總結了它之間的區(qū)別,需要的朋友可以參考下
    2015-06-06
  • JS實現(xiàn)瀏覽器打印、打印預覽示例

    JS實現(xiàn)瀏覽器打印、打印預覽示例

    本篇文章主要介紹了JS實現(xiàn)瀏覽器打印、打印預覽示例。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • js中document.getElementById(id)的具體用法

    js中document.getElementById(id)的具體用法

    本文主要介紹了js中document.getElementById(id)的具體用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04

最新評論