Leetcode 260:只出现一次的数字 III
260. 只出现一次的数字 III
解题思路:
这题首先最简单的方法肯定是遍历+哈希表记录次数的方法,主要说第二种优化了空间复杂度的方法。
遍历nums的所有元素并进行异或处理,得到temp
获取temp的最低位1,由此就可以将恰好出现一次的两个元素分成两组
- temp^(-temp)的方法获取最低位1(-temp其实对应二进制的取反+1,若原位为1则变为0,+1后&为1,若原位为0则变为1,+1后向前进位且&结果为0,因此恰好可以获取到最低位1)
- 设定lowOne=1,while(lowOne&temp==0) lowOne<<=1; (也就是逐步左移判断)
遍历nums的所有元素,根据得到得到lowOne*nums[i]判断所在组,同组的所有元素再进行异或操作,就能得到两个结果,返回即可。
以下是C++代码:
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 风之歌!
评论