leetcode136.Single Number
题目要求
Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
如何在使用O(n)的时间复杂度和O(0)的额外空间复杂度来找到一个数组中唯一一个成单的数字。
思路一:hashset
可以通过set来记录数字出现的情况。如果set中不曾出现该数字,则加入set。如果已经出现,则将其从set中删除。最后无法从set中删除的数字,则是single number
1 | public int singleNumber(int[] nums) { |
思路二:排序
如果将array排序后,那么相同的数字一定位于相邻的位置上,只需要比较2k和2k+1位置上的值是否相同就可以了。
1 | public int singleNumber2(int[] nums) { |
思路三:bit manipulation
这里就需要提一下异或这个操作符。一个数值和另一个数值进行两次异或计算,该数值不变。也就是说: A XOR B XOR B = A XOR (B XOR B) = A
在这里也可以试一下具体数值。
其实异或的话,可以用白话来说就是‘要么这个,要么那个’
所以也就是说,如果将array中的所有数值都进行一次异或计算,那么最终的结果也就是那个singleNumber。
1 | public int singleNumber3(int[] nums) { |