LeetCode96 - 只出现一次的数字
📝 题目描述
题目链接:只出现一次的数字
给你一个 非空 整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
示例:
1 | 示例 1 : |
提示:
1 <= nums.length <= 3 * 10^4-3 * 10^4 <= nums[i] <= 3 * 10^4除了某个元素只出现一次以外,其余每个元素均出现两次。
💡 解题思路
方法一:位运算
使用位运算。对于这道题,可使用异或运算 。异或运算有以下三个性质。
- 任何数和 做异或运算,结果仍然是原来的数,即 。
- 任何数和其自身做异或运算,结果是 ,即 。
- 异或运算满足交换律和结合律,即 。
假设数组中有 个数,其中有 个数各出现两次,一个数出现一次。令 为出现两次的 个数, 为出现一次的数。根据性质3,数组中的全部元素的异或运算结果总是可以写成如下形式:
根据性质2和性质1,上式可化简和计算得到如下结果:
因此,数组中的全部元素的异或运算结果即为数组中只出现一次的数字。
🔧 代码实现
1、位运算
1 | class Solution { |
📊 复杂度分析
1、位运算
- 时间复杂度:,其中 是数组长度,只需要对数组遍历一次。
- 空间复杂度:,无需使用额外空间。
🎯 总结
- 核心思想:技巧类题目,记住即可。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 很多时候不懂事!