LeetCode Java刷题笔记—136. 只出现一次的数字

136. 只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

简单难度。这道题要求线性时间复杂度,而且不需要额外的空间,此时我们可以考虑位运算。我们需要知道关于异或运算的两个规律:

  1. 0与任何数异或结果为任何数:a=0a=a0
  2. 两个相同的数异或结果为0:0=a^a

那么答案已经呼之欲出了,我们依次让元素相互异或,其他元素由于都出现了两次那么异或结果都为0,最后剩下的必定就是只出现了一次的元素。

public int singleNumber( int[] nums ){

   int result = 0;
   for( int num : nums ){
      //依次异或
      result ^= num;
   }
   //最后剩下只出现了一次的元素
   return result;
}

你可能感兴趣的:(java,leetcode,136.,只出现一次的数字)