如何确定数组的(在本例中为“重复”或“唯一”)以使其返回重复或唯一的数字。数组arr
包含正整数。它可能是以下之一:
有数字1到n,只有一个数字是重复的(重复两次),其他数字都是唯一的。
有数字1到n,只有一个数字是唯一的,其他数字重复两次。
我在下面附上了我当前的代码,但是因为它太慢了;我想知道是否可以通过其他方式解决这个问题。
function duplicateOrUnique(arr) {
var duplicate = 0,
output = 0,
n = 0,
num = {}
arr.forEach(function(item) { // Inserts every item in 'arr' to list 'num'
num[item] = 0;
})
arr.forEach(function(item) { // Applies value (count) to every item list 'num'
num[item] += 1;
})
arr.forEach(function(item) { // Check how many times an item have been duplicated
if (num[item] > 1) {
duplicate += 1;
}
})
// Detertime wether 'arr' includes duplicated or unique numbers
if (duplicate > 2) { // unique
arr.forEach(function(item) {
if (num[item] == 1) {
output = item;
}
})
} else { // duplicated
arr.forEach(function(item) {
if (num[item] >= 2) {
output = item;
}
})
}
return output;
}
注意
- 所有数字均为 1 到 n 之间的正整数。
- 数组的长度始终大于 5。
示例
[1,2,3,6,5,4,1] should return 1
[1,2,3,1,2,3,4] should return 4
[3,6,9,2,5,8,1,4,8,7] should return 8
[9,8,7,1,2,3,9,7,1,2,3,4,4,5,5,6,6] should return 8
最佳答案
如果 ES6 不是问题,您可以使用几个集合来查看找到了多少重复项(在 ES6 之前,可以使用哈希对象):
function duplicateOrUnique(arr) {
const set= new Set(), dupes= new Set();
for(let i of arr)
(set.has(i) ? dupes : set).add(i); //if set contains i -> add to dupes
if(dupes.size === 1) //one duplicate
return [...dupes][0]; //return first entry of duplicates
return [...set].find(i => !dupes.has(i)); //one unique-> filter out all dupes from the set
}
console.log(duplicateOrUnique([1,2,3,6,5,4,1]));
console.log(duplicateOrUnique([1,2,3,1,2,3,4]));
关于javascript - 如何确定数组的类型并在 JavaScript 中返回其重复或唯一的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46113056/