题面挺直接的,让人第一眼看到就想用hash。但它有不让开额外的空间,所以第一时间还硬是没想出来这么做。后来看了讨论,发觉还是自己知识学的不够活啊。
这里的解法是利用位运算中的异或运算。异或具有以下特性:任意一个数与0异或还是原来的数、任意一个数与自己异或得到的一定是0。并且异或满足常规的计算率,即存在交换律。
那么对于题目给出的一串数字nums,只需要计算整个数组的异或,最后得到的就一定是那个单独的数。
class Solution { public: int singleNumber(vector<int>& nums) { int res = 0; for(int i : nums) res ^= i; return res; } };
评论
还没有任何评论,你来说两句吧!