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)。
結論
因此,我們建立了一個函式來根據其權重對給定的數字進行排序。我們還處理了具有相同權重的數字,並根據其數值對它們進行了排列。但問題是,如果數字位數增加,時間複雜度也會增加。因此,它對於小位數數字是有效的。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP