给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
输入: [2,2,1]
输出: 1
排序、遍历
class Solution { public int singleNumber(int[] nums) { Arrays.sort(nums); for(int i = 0;i < nums.length-1;i+=2) if(nums[i]!=nums[i+1]) return nums[i]; return nums[nums.length-1]; } }
异或
class Solution { public int singleNumber(int[] nums) { int single = 0; for (int num : nums) { single ^= num; } return single; } }
知识点:
异或是一种基于二进制的位运算,异或运算有以下三个性质。
(注意:计算1^2需先转化为二进制01^10,同位相同取0不同取1结果为11,转化为10进制为3,故1^2=3)
总结:无