返回

JS实现剑指Offer数组中数字出现的次数,简洁易懂!

前端

现在,让我们一起来看看如何使用JavaScript来实现剑指Offer数组中数字出现的次数算法:

1. 问题

在剑指Offer中,有一个问题叫做“数组中数字出现的次数”。这个问题是这样的:在一个数组中,除了两个数字只出现了一次,其他数字都出现了两次。请找出这两个只出现了一次的数字。

2. 算法实现

下面是使用JavaScript实现剑指Offer数组中数字出现的次数算法的步骤:

  1. 定义变量
var nums = [2, 2, 1, 3, 3, 4, 4, 5, 5, 6, 7, 7];
  1. 异或运算
var result = 0;
for (var i = 0; i < nums.length; i++) {
  result ^= nums[i];
}
  1. 查找最后一个1
var lastOne = result & (-result);
  1. 将数组分成两组
var group1 = [];
var group2 = [];
for (var i = 0; i < nums.length; i++) {
  if (nums[i] & lastOne) {
    group1.push(nums[i]);
  } else {
    group2.push(nums[i]);
  }
}
  1. 再次异或运算
var result1 = 0;
for (var i = 0; i < group1.length; i++) {
  result1 ^= group1[i];
}

var result2 = 0;
for (var i = 0; i < group2.length; i++) {
  result2 ^= group2[i];
}
  1. 输出结果
console.log(result1, result2);

3. 示例代码

var nums = [2, 2, 1, 3, 3, 4, 4, 5, 5, 6, 7, 7];

var result = 0;
for (var i = 0; i < nums.length; i++) {
  result ^= nums[i];
}

var lastOne = result & (-result);

var group1 = [];
var group2 = [];
for (var i = 0; i < nums.length; i++) {
  if (nums[i] & lastOne) {
    group1.push(nums[i]);
  } else {
    group2.push(nums[i]);
  }
}

var result1 = 0;
for (var i = 0; i < group1.length; i++) {
  result1 ^= group1[i];
}

var result2 = 0;
for (var i = 0; i < group2.length; i++) {
  result2 ^= group2[i];
}

console.log(result1, result2);

4. 运行结果

1 6

5. 总结

剑指Offer数组中数字出现的次数算法是一种常见的编程算法问题,在JavaScript中实现这种算法非常简单。本文提供了详细的步骤和示例代码,帮助您快速掌握该算法。希望您能够通过本文学习到更多知识,并将其应用到您的项目中。