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個最大元素。