我正在嘗試解決一些“hackerrank.com”編碼挑戰。我堅持這個:
您將獲得一個整數陣列arr和一個整數k。您必須從 的元素創建一個arr'長度陣列,以使其不公平性最小化。不公平定義為
函式應該回傳karrmax(arr') - min(arr')minimum possible unfairness
我的代碼適用于大多數測驗用例。然而,在其中三個測驗用例中——那些規模特別大的測驗用例——由于超過了給定的時間限制而失敗arr。k
如何優化代碼的性能?提前致謝
function maxMin(k, arr) {
// create array to push unfairness values to
var unfairnesses = [];
// sort given array in ascending order
arr.sort(function(a, b) {
return a - b;
});
// loop over sorted array
for(var i = 0; i < arr.length - k 1; i ) {
// get array with the length of k at position i
var tempArr = arr.slice(i, i k);
// determine Max and Min of the sliced array
var tempArrMax = Math.max(...tempArr);
var tempArrMin = Math.min(...tempArr);
// get unfairness of the sliced array
var thisUnfairness = tempArrMax - tempArrMin;
// push sliced-array-unfairness to unfairnesses array
unfairnesses.push(thisUnfairness);
}
// return minimal value of unfairnesses array
return Math.min(...unfairnesses);
}
uj5u.com熱心網友回復:
前兩個步驟可能是:
- 您的陣列已排序。因此沒有必要使用
Math.maxandMath.min- 切片的第一個元素是最小的,最后一個是最大的。 - 當您消除
Math.max和Math.min呼叫時,您可以消除Array.prototype.slice呼叫。然后你就剩下一個排序和一次遍歷陣列了。
uj5u.com熱心網友回復:
要對陣列進行排序,您已經在整個事情上回圈了一次。然后你回圈另一個時間來確定哪個是最大值,哪個是最小值。
你回圈兩次,因為如果你這樣做,你只能回圈一次:
function minMax(array) {
const safeArray = array ?? []
// No max or min as array is empty
if(safeArray.length === 0)
return [undefined, undefined]
let max: number = Number.MIN_SAFE_INTEGER
let min: number = Number.MAX_SAFE_INTEGER
for(let item of safeArray) {
max = Math.max(item, max)
min = Math.min(item, min)
}
return [max, min]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/474463.html
標籤:javascript 表现
