溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JavaScript怎么解決優(yōu)勢洗牌算法題

發(fā)布時間:2022-01-05 16:21:14 來源:億速云 閱讀:142 作者:iii 欄目:大數(shù)據(jù)

本篇內(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ì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(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)容。

AI