c/c++语言开发共享leadcode的Hot100系列–136. 只出现一次的数字

因为之前刚写了461号题目,这个题目与那个很相似, 461号题目用异或来算两个不一样的部分, 那这个题目需要排除一样的部分,并找到不一样的部分。 那么可以再利用一下异或的特性: 1、相同为0,所以,a ^ a = 0。 2、不同为0,所以,0 ^ b = b。 所以,假设数组里面的数分别就是 a,a …

因为之前刚写了461号题目,这个题目与那个很相似,
461号题目用异或来算两个不一样的部分,
那这个题目需要排除一样的部分,并找到不一样的部分。
那么可以再利用一下异或的特性:
1、相同为0,所以,a ^ a = 0。
2、不同为0,所以,0 ^ b = b。
所以,假设数组里面的数分别就是 a,a,b,
—> a ^ a ^ b = b,那么b就是要找的那个不一样的数字。
(异或的最终结果与异或的顺序无关,即 a ^ b ^ c = a ^ c ^ b = b ^ c ^ a )。
附上代码:

int singlenumber(int* nums, int numssize){     int i = 1;     for (; i<numssize; i++)     {         nums[0] ^= nums[i];     }     return nums[0]; }

注:这里没有定义一个新变量,而使用nums[0]作为返回值,是为了节省一点执行用时(少了一次计算),少消耗点内存。
如果哪里可以再节省执行用时的,还请赐教!谢谢!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/602879.html

(0)
上一篇 2021年5月11日
下一篇 2021年5月11日

精彩推荐