题解 | 数组中只出现一次的两个数字
数组中只出现一次的两个数字
http://www.nowcoder.com/practice/389fc1c3d3be4479a154f63f495abff8
解法一:位运算(推荐)
既满足时间复杂度又满足空间复杂度,就要提到位运算中的异或运算 XOR,主要因为异或运算有以下几个特点:
- 一个数和 0 做 XOR 运算等于本身:
a⊕0 = a - 一个数和其本身做 XOR 运算等于 0:
a⊕a = 0 - XOR 运算满***换律和结合律:
a⊕b⊕a = (a⊕a)⊕b = 0⊕b = b
故而在以上的基础条件上,将所有数字按照顺序做抑或运算,最后剩下的结果即为唯一的数字
例:将数组[4, 1, 2, 1, 2]的第一项与之后的元素进行位运算4^1^2^1^2 = 100 -> 101 -> 111 -> 110 -> 100 = 4
化简后可得
4^(1^1)^(2^2) = 100 = 4
参考手绘图解:
C++参考代码:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型vector
* @return int整型vector
*/
vector<int> FindNumsAppearOnce(vector<int>& array) {
// 答案数组
vector<int> ans(2);
int res = 0;
//对数组遍历进行异或运算
for(int x : array){
res ^= x;
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
小白专属-牛客题解 文章被收录于专栏
专注于牛客平台编程题题解,文字+图解。内容很细,小白友好系列

