一、题目:
函数原型:int singleNumber(int* nums, int numsSize)
参数解释:
int* nums是接收数组名的指针
int numsSize是数组元素个数
返回值是只出现过一次的数字(单身狗)
二、思路:
根据题目要求,使用的算法只使用常量额外的空间,即空间复杂度为O(1),算法中我们不能使用额外的数据结构,只能使用一些额外的变量。
由此我们要想到位运算,首先要学会几个位运算法则:
1.x异或0=x
2.x异或x=0
3.x异或y异或=z异或x异或z(交换律)
所以我们只要将给出的数组中所有元素都异或起来,那么出现两次的数字异或结果为0,只剩下0和出现一次的数字异或,由运算法则1得最终结果就是出现一次的数字。
三、代码:
int singleNumber(int* nums, int numsSize){ int result=0; for(int i=0;i<numsSize;i++) { result^=nums[i]; } return result; }