28.只出现一次的数字-LeetCode-Java

    技术2025-01-29  4

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 /** * 方法一:使用set去重 额外使用O(n)的空间 */ class Solution { public int singleNumber(int[] nums) { HashSet set = new HashSet(); for (int num:nums) { if (!set.contains(num)){ set.add(num); }else { set.remove(num); } } return (int) set.iterator().next(); } } /** * 方法二:使用异或运算 * 异或运算有以下三个性质: * 1.任何数和 0 做异或运算,结果仍然是原来的数,a^0=a * 2.任何数和其自身做异或运算,结果是 0,即 a^a=0 * 3.异或运算满足交换律和结合律,即 a^b^a=b^a^a=b^(a^a)=b^0=b */ class Solution { public int singleNumber(int[] nums) { int n = 0; for (int num : nums) { n ^= num; } return n; } }
    Processed: 0.008, SQL: 9