当前位置: 面试刷题>> 只出现一次的数字(经典算法150题)
### 题目描述
**题目**: 在一个非空整数数组中,除了某个元素只出现一次以外,其余每个元素均出现两次。请编写一个函数找出只出现一次的数字。要求函数返回这个只出现一次的数字。
**示例 1**:
```
输入: [2,2,1]
输出: 1
```
**示例 2**:
```
输入: [4,1,2,1,2]
输出: 4
```
**注意**:
1. 你的算法应该具有线性时间复杂度。你能否不使用额外空间来实现?
### PHP 示例代码
```php
function singleNumber($nums) {
$result = 0;
foreach ($nums as $num) {
$result ^= $num; // 使用异或运算,相同为0,不同为1
}
return $result;
}
// 示例用法
$nums = [4, 1, 2, 1, 2];
echo singleNumber($nums); // 输出 4
```
### Python 示例代码
```python
def singleNumber(nums):
result = 0
for num in nums:
result ^= num # 异或运算
return result
# 示例用法
nums = [4, 1, 2, 1, 2]
print(singleNumber(nums)) # 输出 4
```
### JavaScript 示例代码
```javascript
function singleNumber(nums) {
let result = 0;
for (let num of nums) {
result ^= num; // 使用异或运算
}
return result;
}
// 示例用法
const nums = [4, 1, 2, 1, 2];
console.log(singleNumber(nums)); // 输出 4
```
**解释**:
在这个问题中,我们使用异或(XOR)运算来找到只出现一次的数字。异或运算有一个非常有用的性质:任何数和0做异或运算,结果仍然是原来的数;任何数和其自身做异或运算,结果是0。因此,当我们遍历数组并对所有元素进行异或运算时,成对的元素会相互抵消为0,最终只剩下只出现一次的元素。这个算法的时间复杂度是O(n),空间复杂度是O(1),满足题目要求。
**关于码小课**:
如果你对算法和数据结构感兴趣,不妨来我的码小课网站探索更多内容。在码小课,你可以找到丰富的编程教程、实战项目以及算法解析,帮助你不断提升编程能力。