今天做领扣题目遇到了这么一个题:
(https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/array/25/)
针对给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
我第一时间看到这么题目想到的就是遍历,从头开始比到尾(好像好蠢的样子);但是集合中有Set,因为Set他不允许其中存在重复的值,所以最后选用了它;
但是在提交成功了之后,我的代码运行效率只在20%以下,很低的一个名次,最高的大神采用的是异或的做法;
代码如下:
public static int singleNumber(int[] nums) {
int single =0;
for(int i =0;i < nums.length; i++){
single = single ^ nums[i];
}
return single;
}
首先:异或有就是二进制数字相互对比,相同的则为0,不同的则为1,所以初始变量为0;0异或所有的数字都为后面的数字本身;而由于异或的特性,所有的数字被同一个数字异或两次结果不变;因此就很方便的可以解除上面的问题
可见,基础运算真的很重要
网友评论