136. 只出现一次的数字https://leetcode.cn/problems/single-number/
简单
相关标签
相关企业
提示
给你一个 非空 整数数组 nums
,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
示例 1 :
输入:nums = [2,2,1] 输出:1示例 2 :
输入:nums = [4,1,2,1,2] 输出:4示例 3 :
输入:nums = [1] 输出:1
这道题也很简单,这里面主要是有一个思想。
A^A = 0;
A^0 = A;
A^B^C = A^C^B
相同的数 异或 会等于 0
那么 A^B^A^B = 0
最后 A^B^A^B^C = C;
这个C不就是只出现一次的数了吗。
废话不多说,注释掉的代码是传统的暴力算法,直接上代码。
#include<stdio.h>
void answer(int *p, int size )
{
int n = p[0]; //
for(int i=1; i<size; i++)//数组中所有的元素一起异或,相同的会被消掉,最后只留下唯一不同的
{
n ^= p[i];
}
printf("%d",n);
}
int main(void)
{
int nums[5] = {1,3,1,6,3};
// for(int i=0; i<5; i++)
// {
// int count = 0;
// for(int j=0; j<5; j++)
// {
// if(nums[i] == nums[j])
// {
// count++;
// }
// }
// if(count == 1 )
// {
// printf("%d",nums[i]);
// }
// }
answer(nums, 5);
}