您的位置:首页 > 其它

37.数组中只出现一次的数字

2016-05-11 21:14 113 查看
数组中只出现一次的数字

参与人数:2603时间限制:1秒空间限制:32768K

本题知识点: 数组

算法知识视频讲解


题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

这道题思路想出来后就很简单了,可是我却写错了一个地方,导致调试了很久。。

// 37.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <vector>
using namespace::std;

class Solution {
public:
void FindNumsAppearOnce(vector<int> data, int* num1, int *num2) {
if (data.size() < 2) return;

int divideNum = 0;
for (int i = 0; i < data.size(); i++) {
divideNum ^= data[i];
}

unsigned int bit = 0;
while (((divideNum & 1) == 0) && (bit < 8 * sizeof(int))) {
divideNum = divideNum >> 1;
bit++;
}

*num1 = *num2 = 0;
for (int i = 0; i < data.size(); i++) {
if (IsBit(data[i], bit)) {
*num1 = *num1 ^ data[i];
}
else {
*num2 = *num2 ^ data[i];
}
}
}
bool IsBit(int num, int index)
{
num = num >> index;
return (num & 1);
}
bool isZero(int num, unsigned int index) {
num = num >> index;
return (num & 1);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> test;
test.push_back(2);
test.push_back(4);
test.push_back(3);
test.push_back(6);
test.push_back(3);
test.push_back(2);
test.push_back(5);
test.push_back(5);
Solution s;
int num1, num2;
s.FindNumsAppearOnce(test, &num1, &num2);
return 0;
}


if (IsBit(data[i], bit))
我写成了

if (IsBit(*num1, bit))
吸取教训!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: