算法练习【136. 只出现一次的数字】

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
链接:https://leetcode-cn.com/problems/single-number

自己思路:利用Hash表

  1. 初次审题时没有注意其余元素均出现两次,考虑遍历数组后用Hasmap保存 <值-次数>对,最后遍历map输出次数为1的值。
  2. 注意到其余元素只出线两次时,可以优化为保存到HashSet,并且如果已经存在就抛出,最后只有一个值,直接输出即可。
public int solution(int[] nums){
   HashSet set = new HashSet();
        for(int i =0;i

其余思路

1. 数学

2∗(a+b+c)−(a+a+b+b+c)=c
被减数相当于把所有不同元素之和*2,减数相当于所有元素之和。

public int solution(int[] nums){
     HashSet set = new HashSet();
        int sum = 0;
        for(int i =0;i

2. 利用亦或操作特性【推荐】

进行亦或操作时,0 xor a = a , a xor a =0
遍历数组进行亦或操作,复数次出现的数 为0 ,因此最后结果就是只有1次的数。
此方法空间复杂度O(1)

public int solution(int[] nums){
 int result = 0;
        for(int i =0;i

你可能感兴趣的:(算法练习【136. 只出现一次的数字】)