JavaScript怎么解决优势洗牌算法题

本篇内容介绍了“JavaScript怎么解决优势洗牌算法题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

题目描述:

给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。返回 A 的任意排列,使其相对于 B 的优势最大化。

示例 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两个数组长度一样,将A数组进行排列,让后逐项与B数组进行比较, A[i]>B[i]的一分,使分数最大化。

看起来很简单,但是该如何思考呢?从哪里下手呢?

我们可以先将A数组进行排序,从小到大进行排序,排序完成后,循环遍历B数组,用B数组中的每一项,去A数组中查找比这一项刚好大一点的数据,查找到后,将其放入到对应位置,如果查找不到从排序完成的A数组中抽出最小的放到当前位置。

原理类似于田忌赛马,用A数组中的最小的数据,对冲B数组中的比较大的数据,剩下A数组中的数据挑选略大于B数组中的数据。代码如下:

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怎么解决优势洗牌算法题”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程之家网站,小编将为大家输出更多高质量的实用文章

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...