[2016/11/14]naive问题中异或的巧妙用法

来源:互联网 发布:充值系统java 源码 编辑:程序博客网 时间:2024/06/11 05:11

一道简单题,大意是给你一个数组,除了一个数只出现一次,其他全部的数字都出现了两次。求那个数。
正常人的思路都是先sort一遍,再写个step为2的for循环找。这样做时间复杂度nlogn+n,空间复杂度1。
但是!!!下面这个做法用了相同的空间复杂度,时间复杂度仅为n。
巧妙利用了按位异或的性质:一样为0,不一样为1。最后异或之后只剩下不同的数啦!


粘了代码如下:

int singleNumber(int* nums, int numsSize) {    int x = 0;    int i = 0;    for (i = 0; i<numsSize;i++){       x=x^nums[i];    }    return x;}
0 0
原创粉丝点击