返回
LeetCode 刷题实战:找出只出现一次的数字,技术大牛秒出解法!
前端
2024-02-18 14:52:50
导言:
踏入编程世界的旅途上,LeetCode 刷题可是必经之路。今天,我们就来挑战一道经典题目:找出只出现一次的数字。无论是算法初学者还是经验丰富的开发者,这道题都值得一试。让我们携手探索不同的解法,用技术征服编程难题!
索引寻踪:暴力出击
最直接的解法莫过于暴力法。借助 JavaScript 内置的 indexOf
和 lastIndexOf
方法,我们可以从左到右和从右到左分别查找元素出现的位置。当元素只出现一次时,这两个方法返回的索引是一致的。此时,我们只需返回该索引对应的元素即可。
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 刷题不仅能磨砺算法技能,更能培养编程思维。下次遇到编程难题时,不妨跳出思维定势,从不同的角度寻求突破。技术大牛的成长之路,从敢于挑战和不断探索开始!