Problem: 136. 只出现一次的数字
难题干不动了. 干一点简单的
思路
看到这个题首先想到的就是hash,把数字当key, 次数当vulue.然后遍历取出来次数为1的. 但是评论区看了一个好方法, 使用亦或.亦或只是简单了解一点,我还真没用过. 大概就是, 两个数字相同就是 0, 两个数字不同,就是转换成二进制比较每一位是否相同, 不同就是1,相同就是0. 这样下来, 相同的数加一块就变成0了. 只剩下那个不同的.
相关知识
可参考亦或运算亦或运算
复杂度
- 时间复杂度:
O(1)
- 空间复杂度:
添加空间复杂度, 示例: O ( n ) O(n) O(n)
Code
class Solution {
public int singleNumber(int[] nums) {
int ans = 0;
for(int num: nums) {
ans ^= num;
}
return ans;
}
}