我在面试中被要求找到重复的元素。我已经找到了使用for循环的方法,但是面试官要求更好的方法来找出答案,这样可以在没有out for循环的情况下提高性能。我是探索Java脚本的初学者。是否有任何一种方法可以帮助寻找数组中的重复元素。下面是我的答案代码
var a = [1,2,3,3,4,4,5,5,6,7,8,8,9,10,11,12];
var repeatElements = [];
for (var i=0;i<a.length;i++){
for(var j=1+i; j<a.length;j++){
if (a[i]===a[j]){
repeatElements.push(a[i]);
}
}
}
console.log(repeatElements);
我已经检查了这个堆栈溢出问题的答案,Get all unique values in a JavaScript array (remove duplicates),使用过滤器查找重复是否更有效?
发布于 2019-12-17 11:06:05
在线性时间内这样做的一个好方法是使用一个频率表:
var a = [1,2,3,3,4,4,5,5,6,7,8,8,9,10,11,12];
var frequencyTable = {};
var repeatElements = [];
for (var i=0; i<a.length; i++){
if (frequencyTable[a[i]]){
frequencyTable[a[i]]++;
repeatElements.push(a[i]);
} else {
frequencyTable[a[i]] = 1;
}
}
console.log(repeatElements);这样,您就只能循环遍历数组一次。
发布于 2019-12-17 11:08:18
您的解决方案具有O(n^2)复杂性。我想面试官是在期待你提供O(n)解决方案,这涉及到使用某种重复项目字典。看起来是这样的:
const a = [1,2,3,3,4,4,5,5,6,7,8,8,9,10,11,12];
function getRepetitives(arr) {
const itemsDuplicates = {}
arr.forEach(item => {
itemsDuplicates[item] = itemsDuplicates.hasOwnProperty(item)
? itemsDuplicates[item] + 1
: 1
})
const repetitives = Object.entries(itemsDuplicates).filter(([ k ,v ]) => v > 1).map(([k]) => k)
return repetitives
}
console.log(getRepetitives(a))
https://stackoverflow.com/questions/59372760
复制相似问题