JavaScript程式:查詢陣列經K次右旋轉後的第M個元素


我們正在編寫一個JavaScript程式來查詢陣列經過k次右旋轉後的第m個元素。首先,我們將獲取陣列、m和k的輸入。然後,我們將使用迴圈來執行右旋轉。在迴圈的每次迭代中,我們將陣列的最後一個元素移動到第一個位置。我們將繼續此迴圈k次以獲得旋轉後的陣列。最後,我們將返回旋轉後陣列的第m個元素作為結果。

方法

查詢陣列經過k次右旋轉後第m個元素的方法可以分解如下:

  • 計算k次旋轉後第m個元素的實際位置,這將是(m-k) % n,其中n是陣列的長度。

  • 檢查計算出的位置是否為負數,如果是,則可以透過向其新增n將其轉換為正數位置。

  • 返回陣列中計算位置處的元素。

  • 為了最佳化此解決方案,您可以使用模運算子將計算出的位置保持在陣列的邊界內,因此您無需檢查負值。

  • 此解決方案的時間複雜度為O(1),因為最終位置的計算和該位置元素的檢索都是恆定時間操作。

  • 空間複雜度為O(1),因為解決方案中沒有使用額外的輔助資料結構。

示例

這是一個查詢陣列經過k次右旋轉後第m個元素的JavaScript程式示例

function findElement(arr, k, m) {
   k = k % arr.length; // handling large k values
   return arr[(arr.length - k + m - 1) % arr.length];
}
let arr = [1, 2, 3, 4, 5];
let k = 2;
let m = 3;
console.log(findElement(arr, k, m));

解釋

  • findElement函式接收一個數組arr、旋轉次數k以及要查詢的第m個元素。

  • k = k % arr.length這一行計算處理大的k值後對陣列執行的實際旋轉次數。這是因為旋轉陣列的次數超過其長度不會改變其位置,因此取k對陣列長度的模可以得到執行的實際旋轉次數。

  • return arr[(arr.length - k + m - 1) % arr.length];這一行計算k次旋轉後第m個元素的位置。表示式arr.length - k給出k次旋轉後陣列的起始位置,然後+ m - 1給出第m個元素的位置,最後,與陣列長度取模確保如果位置超出邊界,則位置會環繞陣列末尾。

  • 最後,程式呼叫findElement函式並記錄結果。在這種情況下,輸出將是4。

更新於:2023年3月15日

75 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告