LeetCode进阶记录--136

背景

上次面试,考的是LeetCode136题目,真要是实现,其实方法会比较多(遍历或记录),但明显考点不在此;自己的思路是需要把相同的数进行中和(此前做过类似的题目),不过最后还是没有搞出来,最后面试官提示了使用异或操作;虽然此前在刷leetcode时有做过类似的题目,但是印象不深,也没有太理解异或操作的特点,所以导致这次简单的题目fail了。今天单拿出来又仔细练习了一番。

异或的特点

    1)0^n=n;解释:0与任何数异或的结果为该数值;
    2)n^n=0;解释:两个相等的值进行异或,则结果为0。

所以说,通过异或操作,就能实现将相同的数值进行中和的效果。

题目

	给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
	说明:
	你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
	示例 1:
	输入: [2,2,1]
	输出: 1
	示例 2:
	输入: [4,1,2,1,2]
	输出: 4
	来源:力扣(LeetCode)
	链接:https://leetcode-cn.com/problems/single-number
	著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

答案

public int singleNumber1(int[] nums) {
     
    // 1  0^n=n;
    // 2  n^n=0
    int result = 0;
    for (int i : nums) {
     
        result ^= i;
    }
    return result;
}

你可能感兴趣的:(编程,java,leetcode)