javascript - 如何确定数组的类型并在 JavaScript 中返回其重复或唯一的数字

标签 javascript arrays algorithm numbers integer

如何确定数组的(在本例中为“重复”或“唯一”)以使其返回重复或唯一的数字。数组arr 包含正整数。它可能是以下之一:

  1. 有数字1到n,只有一个数字是重复的(重复两次),其他数字都是唯一的。

  2. 有数字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/

相关文章:

javascript - 检查输入中是否仅输入了数值。 (jQuery)

javascript - 选择并拖动以获取选定元素

javascript - 如何使用 javascript 对象中的构造函数来仅使用 `this` 中的属性?

java - 在这个 if 条件下是否真的需要 >=。 == 还不够吗?

algorithm - 两个网格之间非常快的 bool 差异

c - 为数的质因数找到更好的算法

javascript - 如何为用户名约束创建 jQuery Validator 方法?

c++ - 子数组赋值 : initialization with "{...}" expected for aggregate object error

java - Java 中根据属性对对象数组进行排序

algorithm - 比较两个英文字符串的相似性