Single Number (E)
Given a non-empty array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Example 1:
Input: [2,2,1]
Output: 1
Example 2:
Input: [4,1,2,1,2]
Output: 4
题意
给定一个非空数组,该数组中除了一个元素外,其余所有元素都出现了两次,找出该元素。
思路
使用O(N)O(N)O(N)额外空间的方法很多,比如开散列、用Set计算和等。
不使用额外空间的方法比较取巧,利用了异或位运算的性质:两个相同的数异或的结果为0。因此只要遍历所有元素进行异或,最后剩下的就是只出现了一次的元素。
代码实现 - 位运算
class Solution {
public int singleNumber(int[] nums) {
int ans = nums[0];
for (int i = 1; i < nums.length; i++) {
ans = ans ^ nums[i];
}
return ans;
}
}
本文介绍了一个算法问题的解决方案,即在一个除一个元素外所有元素均出现两次的数组中找到那个唯一的单例元素。文章详细阐述了如何利用异或位运算的特性,通过遍历数组并异或所有元素来高效解决此问题,最终剩下的结果即为所求的单例元素。
492

被折叠的 条评论
为什么被折叠?



