领扣做题的小感悟

2019-03-21  本文已影响0人  一锁荡离魂

    今天做领扣题目遇到了这么一个题:

(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异或所有的数字都为后面的数字本身;而由于异或的特性,所有的数字被同一个数字异或两次结果不变;因此就很方便的可以解除上面的问题

可见,基础运算真的很重要

上一篇下一篇

猜你喜欢

热点阅读