【发布时间】:2019-01-04 14:57:24
【问题描述】:
function areSimilar(a, b){
return a.sort().join('') === b.sort().join('');
}
console.log(areSimilar([1, 2, 3], [1, 2, 3])); //true
console.log(areSimilar([1, 2, 3], [2, 1, 3])); //true
console.log(areSimilar([1, 2, 2], [2, 1, 1])); //false
如果一个数组可以通过交换其中一个数组中的最多一对元素从另一个数组中获得,则称这两个数组相似。
给定两个数组a和b,检查它们是否相似。
示例
- 对于 a = [1, 2, 3] 和 b = [1, 2, 3],输出应为 areSimilar(a, b) = true。
数组是相等的,不需要交换任何元素。
- 对于 a = [1, 2, 3] 和 b = [2, 1, 3],输出应为 areSimilar(a, b) = true。
我们可以通过交换 b 中的 2 和 1 从 a 中得到 b。
- 对于 a = [1, 2, 2] 和 b = [2, 1, 1],输出应为 areSimilar(a, b) = false。
【问题讨论】:
-
“如果可以通过交换其中一个数组中的最多一对元素从另一个数组中获得一个数组,则称这两个数组相似。”这不是你的@ 987654323@ 函数检查,除非您的函数只使用三元素数组调用...?例如,它会为
[1, 1, 2, 2]和[2, 2, 1, 1]返回true,但从前者到后者需要两次交换,而不仅仅是一次。 -
刚要发布与 T.J 类似的评论,您的排序版本不会做问题所要求的,。它只是根据提供的示例偶然给出正确的真/假。
-
如果我理解正确,我的想法是按值对两个数组进行排序(使用哪种“算法”、升序、降序、字符串或比较并不重要)。排序后,您可以比较每个对应的位置(键),如果发现超过 1 个差异,结果应返回 false。
-
@dev101
If I understand this right,很遗憾你错过了问题的重要部分 ->swapping at most one pair of elements排序肯定会打破这条规则。
标签: javascript algorithm performance big-o