Day9-只出现一次的数字

YVTU

🔗 LeetCode 136 - Single Number

📌 题目描述

给定一个非空整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

你必须在线性时间复杂度内完成算法,并且不能使用额外空间。

示例:

1
2
输入: [4,1,2,1,2]
输出: 4

💡 解题思路

  • 异或运算的关键特性:
    • a ^ a = 0
    • a ^ 0 = a
  • 所以将所有数字进行异或操作,成对的数字会抵消为 0,剩下的就是那个只出现了一次的数字。

✅ JavaScript 实现

1
2
3
4
5
6
7
var singleNumber = function(nums) {
let result = 0;
for (let num of nums) {
result ^= num;
}
return result;
};

🟣 Swift 实现

1
2
3
4
5
6
7
func singleNumber(_ nums: [Int]) -> Int {
var result = 0
for num in nums {
result ^= num
}
return result
}

🧠 思考拓展

  • 如果一个元素出现一次,其余出现三次,该怎么做?
  • 如果有两个只出现一次的数字,其余都出现两次呢?
  • 如何用位运算统计任意次数的重复?