目录
题目来源
136. 只出现一次的数字 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/single-number/
函数介绍
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。
找出那个只出现了一次的元素。
问题示例
输入: [2,2,1] 输出: 1
输入: [4,1,2,1,2] 输出: 4
异或运算性质
异或运算有以下三个性质:
1、任何数和 0 做异或运算,结果仍然是原来的数, 即 a⊕0=a
2、任何数和其自身做异或运算,结果是 0, 即a⊕a=0
3、异或运算满足交换律和结合律, 即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b
函数实现
int singleNumber(int* nums, int numsSize)
{
int ret=0;
for( int i = 0; i<numsSize; i++)
{
ret = nums[i]^ret;
}
return ret;
}
用法示例
#include<stdio.h>
//将数组里面所有的数字异或一遍,最终得到的那个数字就是只出现一次的数。
int singleNumber(int* nums, int numsSize)
{
int ret = 0;
for (int i = 0; i < numsSize; i++)
{
ret = nums[i] ^ ret;
}
return ret;
}
int main()
{
int nums[3] = { 2,2,1 };
printf("%d", singleNumber(nums, 3));
return 0;
}