javascript - 检查 N > 2 个具有最高性能的数组之间的相等性?
问题描述
我想检查n
数组是否在 JavaScript 中都包含相同的整数?最有效的方法是什么?
解决方案
该解决方案避免使用sort
,使算法 O(n²),其中 n 是数组的数量和长度。它具有不改变数组的额外好处,还可以让您传递包含任何类型的数组,而不仅仅是数字。它通过为每个数组项计算一个频率包来操作,然后评估它们是否都包含相同的数据。和函数都是 O(n) toBag
。bagsEqual
这使得主要算法arraysSame
O(n²)。使用sort
频率袋代替频率袋会得到 O(n²log(n)) 的解决方案,这几乎没有那么有利。
function arraysSame(...arrays) {
if(arrays.length < 2) return true;
let bag1 = toBag(arrays[0]);
for(let i = 1; i < arrays.length; i++) {
const bag2 = toBag(arrays[i]);
if(!bagsEqual(bag1, bag2)) return false;
}
return true;
}
function bagsEqual(bag1, bag2) {
if(bag1.size != bag2.size) return false;
for(const [key, value] of bag1) {
if(!bag2.has(key)) return false;
if(value != bag2.get(key)) return false;
}
return true;
}
function toBag(array) {
const bag = new Map();
for(const val of array) {
const count = bag.get(val) || 0;
bag.set(val, count + 1);
}
return bag;
}
推荐阅读
- python - 想给一个用户上传几张图片,只允许我上传一张
- jenkins-pipeline - 关于管道的问题 从 Git 签出代码
- ios - ZDCChatView scrollToLast iOS 应用程序崩溃
- azure - 如何使用“联系我”发布选项在 azure 市场中发布 Web 应用程序
- corda - 尝试加载数据时,Corda 节点出现 JVM OutOfMemory 异常
- eonasdan-datetimepicker - Bootstrap DateTimePicker 关闭按钮位置
- java - 文件资源管理器无法启动
- json - Python循环遍历URL中的变量
- java - 在 customAdapter 中删除一行使用 SQLite 扩展 BaseAdapter - Android
- sql - SQL - 如何按项目单位获得最终数量组?