您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“JavaScript怎么解決優(yōu)勢洗牌算法題”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
題目描述:
給定兩個大小相等的數(shù)組 A 和 B,A 相對于 B 的優(yōu)勢可以用滿足 A[i] > B[i] 的索引 i 的數(shù)目來描述。返回 A 的任意排列,使其相對于 B 的優(yōu)勢最大化。
示例 1:
輸入:A = [2,7,11,15], B = [1,10,4,11]
輸出:[2,11,7,15]
示例2
輸入:A = [12,24,8,32], B = [13,25,32,11]
輸出:[24,32,8,12]
我們用示例2來說明,A、B兩個數(shù)組長度一樣,將A數(shù)組進(jìn)行排列,讓后逐項與B數(shù)組進(jìn)行比較, A[i]>B[i]的一分,使分?jǐn)?shù)最大化。
看起來很簡單,但是該如何思考呢?從哪里下手呢?
我們可以先將A數(shù)組進(jìn)行排序,從小到大進(jìn)行排序,排序完成后,循環(huán)遍歷B數(shù)組,用B數(shù)組中的每一項,去A數(shù)組中查找比這一項剛好大一點的數(shù)據(jù),查找到后,將其放入到對應(yīng)位置,如果查找不到從排序完成的A數(shù)組中抽出最小的放到當(dāng)前位置。
原理類似于田忌賽馬,用A數(shù)組中的最小的數(shù)據(jù),對沖B數(shù)組中的比較大的數(shù)據(jù),剩下A數(shù)組中的數(shù)據(jù)挑選略大于B數(shù)組中的數(shù)據(jù)。代碼如下:
function comp(arr1, arr2) {
var arr = [];
arr1.sort(function(a, b) {
return a - b;
});
arr2.forEach(function(item) {
var index = arr1.findIndex(function(_item) {
return _item > item;
});
if (index > -1) {
arr.push(arr1.splice(index, 1)[0]);
} else {
arr.push(arr1.splice(0, 1)[0]);
}
});
return arr;
}
“JavaScript怎么解決優(yōu)勢洗牌算法題”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。