JavaScript程式:按原順序查詢陣列中最大的k個元素


我們將使用JavaScript陣列的sort方法和切片技術來按原順序查詢陣列中最大的k個元素。首先,我們將陣列按降序排序,然後從開頭切片到第k個索引以獲得最大的k個元素。透過保留元素的原始順序,資料的意義和上下文保持不變,使我們更容易分析和解釋結果。

方法

按原順序查詢陣列中k個最大元素的方法如下:

  • 建立一個新的空陣列來儲存k個最大元素。

  • 遍歷輸入陣列,並將每個元素與新陣列中的元素進行比較。

  • 如果新陣列少於k個元素,則只需將當前元素新增到新陣列中。

  • 如果新陣列有k個元素,則將當前元素與新陣列中的最小元素進行比較。

  • 如果當前元素大於最小元素,則移除最小元素並將當前元素新增到新陣列中。

  • 最後,返回包含按其在輸入陣列中出現的順序排列的k個最大元素的新陣列。

示例

這是一個在JavaScript中查詢陣列中按原順序排列的k個最大元素的完整可執行示例:

function findKMaxElements(arr, k) {
   
   // Create a copy of the original array
   let sortedArr = [...arr];
   
   // Sort the copy of the array in descending order
   sortedArr.sort((a, b) => b - a);
   
   // Slice the first k elements of the sorted array
   let kMaxElements = sortedArr.slice(0, k);
   
   // Create a result array to store the k maximum elements in their original order
   let result = [];
   
   // Loop through the original array
   for (let i = 0; i < arr.length; i++) {
      
      // Check if the current element is in the kMaxElements array
      if (kMaxElements.includes(arr[i])) {
         
         // If yes, add it to the result array
         result.push(arr[i]);
         
         // Remove the element from the kMaxElements array
         
         // to keep track of the elements that have already been added to the result
         kMaxElements.splice(kMaxElements.indexOf(arr[i]), 1);
         
         // If the kMaxElements array is empty, it means all k maximum elements have been found
         if (kMaxElements.length === 0) {
            break;
         }
      }
   }
   
   // Return the result array
   return result;
}
// Test the function with an example array
let arr = [3, 2, 1, 4, 5];
let k = 3;
console.log(findKMaxElements(arr, k));

解釋

  • 函式findKMaxElements接收一個數組arr和一個整數k作為輸入。

  • 第一步是建立原始陣列arr的副本,並使用sort方法將其按降序排序。這將使我們能夠輕鬆找到k個最大元素。

  • slice方法用於提取排序陣列的前k個元素並將它們儲存在一個新陣列kMaxElements中。

  • 建立一個result陣列來儲存按其原始順序排列的k個最大元素。

  • 使用for迴圈遍歷原始陣列arr。對於陣列中的每個元素,程式碼使用includes方法檢查它是否在kMaxElements陣列中。

  • 如果當前元素在kMaxElements陣列中,則將其新增到result陣列中。splice方法用於從kMaxElements陣列中刪除該元素,以跟蹤已新增到結果中的元素。

  • 迴圈將持續進行,直到找到並新增到result陣列中的所有k個最大元素,或者直到到達原始陣列的末尾。

  • 最後一步是返回result陣列,其中包含原始陣列中按其原始順序排列的k個最大元素。

更新於:2023年3月15日

88 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告