返回

LeetCode 刷题实战:找出只出现一次的数字,技术大牛秒出解法!

前端

导言:

踏入编程世界的旅途上,LeetCode 刷题可是必经之路。今天,我们就来挑战一道经典题目:找出只出现一次的数字。无论是算法初学者还是经验丰富的开发者,这道题都值得一试。让我们携手探索不同的解法,用技术征服编程难题!

索引寻踪:暴力出击

最直接的解法莫过于暴力法。借助 JavaScript 内置的 indexOflastIndexOf 方法,我们可以从左到右和从右到左分别查找元素出现的位置。当元素只出现一次时,这两个方法返回的索引是一致的。此时,我们只需返回该索引对应的元素即可。

const findSingleNumber = (nums) => {
  for (let i = 0; i < nums.length; i++) {
    const index1 = nums.indexOf(nums[i]);
    const index2 = nums.lastIndexOf(nums[i]);
    if (index1 === index2) return nums[i];
  }
};

异或运算:巧解难题

异或运算 (^) 拥有一个神奇的性质:两个相同的数字异或的结果为 0,而一个数字异或 0 的结果仍然是自己。因此,我们可以将数组中所有元素异或起来,得到的结果就是只出现一次的数字。

const findSingleNumber = (nums) => {
  let result = 0;
  for (let i = 0; i < nums.length; i++) {
    result ^= nums[i];
  }
  return result;
};

哈希表:空间换时间

哈希表是一种高效的数据结构,可以快速查找元素是否存在。我们可以使用一个哈希表来记录每个元素出现的次数。只出现一次的数字在哈希表中只会存在一次,我们可以通过遍历哈希表找到它。

const findSingleNumber = (nums) => {
  const map = {};
  for (let i = 0; i < nums.length; i++) {
    if (map[nums[i]]) map[nums[i]]++;
    else map[nums[i]] = 1;
  }
  for (let key in map) {
    if (map[key] === 1) return parseInt(key);
  }
};

结语:

通过探索不同的解法,我们发现找出只出现一次的数字有多种途径。无论是暴力法、异或运算还是哈希表,每种方法都有其优缺点。根据具体场景和数据规模,选择最合适的解法才是明智之举。

LeetCode 刷题不仅能磨砺算法技能,更能培养编程思维。下次遇到编程难题时,不妨跳出思维定势,从不同的角度寻求突破。技术大牛的成长之路,从敢于挑战和不断探索开始!