Given an 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?
还是用了额外空间。。
hash记录,第一次sum加,出现过sum就与之相减,最后留下的就是这个只出现一次的。
public static int singleNumber(int[] nums)
{
HashSet<Integer> hashset=new HashSet<>();
int sum=0;
for(int n:nums)
if(!hashset.contains(n))
{
hashset.add(n);
sum+=n;
}
else {
sum-=n;
}
return sum;
}-----------------------------------------------------------------------------------------------------------------
比较好的空间O(1)办法是异或,a^a=0,异或本身为0,利用这个,直接异或一遍就出来了。
public int singleNumber(int[] nums) {
int ans =0;
int len = nums.length;
for(int i=0;i!=len;i++)
ans ^= nums[i];
return ans;
}
本文介绍了一种线性时间复杂度的算法来找出数组中仅出现一次的元素。通过使用哈希集合记录并累加未出现过的元素,最终通过相减的方式找到目标元素。此外,还提供了一种空间复杂度为O(1)的方法,即通过位操作中的异或运算实现。

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



