JavaScript 中根據數字權重進行排序


在這個問題陳述中,我們的目標是使用 Javascript 根據數字的權重對給定的數字陣列進行排序。首先,我們將編寫一個計算數字權重的函式,然後用另一個函式對它們進行排序。

理解問題

我們必須根據數字的權重對提供的數字進行排序。結果我們將得到一個數字陣列。數字的權重定義為其自身數字的總和。例如:假設我們有一個像 [19, 11, 12, 15] 這樣的陣列。我們需要根據它們的權重對這些數字進行排序。19、11、12 和 15 的權重分別為 10、2、3 和 6。

根據權重對數字排序後,結果陣列應為 [11, 12, 15, 19]。

給定問題的邏輯

在程式碼中定義一個函式來計算給定數字的權重。數字的權重是其自身數字的總和。

並構造另一個函式來根據其權重對數字進行排序,並將整數陣列作為輸入。如果兩個數字具有相同的權重,那麼我們將根據它們的數值對它們進行排序。在實現中,我們將使用陣列排序方法並傳遞一個比較函式作為輸入。我們將傳遞到排序方法中的函式將比較兩個數字的權重。

演算法

步驟 1:使用使用者定義的函式計算給定數字的權重。

步驟 2:建立一個函式來根據第一個函式計算的權重對數字進行排序。因此,此函式將接受一個數組引數,並根據其權重對這些數字進行排序。

步驟 3:使用 sort 方法對陣列中存在的數字進行排序,並傳遞比較函式的引數。

步驟 4:使用我們在步驟 1 中定義的權重函式。我們將比較我們在 sort 方法中傳遞的比較函式中兩個數字的權重。

步驟 5:如果數字的權重相同或相等,我們將比較它們的數值。

步驟 6:我們將返回根據給定數字的權重排序的陣列。

示例

//Get the weights of numbers
function getWeight(num) {
   let sum = 0;
   while (num > 0) {
      sum += num% 10;
      num = Math.floor(num / 10);
   }
   return sum;
}

//Sort the numbers with respect to the weights
function sortByWeight(nums) {
   nums.sort((a, b) => {
      const wA = getWeight(a);
      const wB = getWeight(b);
      if (wA === wB) {
         return a - b;
      }
       return wA - wB;
   });
   return nums;
}

const nums = [123, 56, 12, 478, 99];
console.log(sortByWeight(nums));

輸出

[ 12, 123, 56, 99, 478 ]

複雜度

該函式的時間複雜度為 O(n * m * log n),其中 n 是輸入陣列條目的大小,m 是每個數字中平均數字位數。因為對於每個數字,我們都必須計算相應的權重,這需要 O(m) 時間。然後排序函式的時間複雜度為 O(n * log n)。

結論

因此,我們建立了一個函式來根據其權重對給定的數字進行排序。我們還處理了具有相同權重的數字,並根據其數值對它們進行了排列。但問題是,如果數字位數增加,時間複雜度也會增加。因此,它對於小位數數字是有效的。

更新於:2023年8月16日

959 次瀏覽

啟動您的 職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.