37 陣列中只出現一次的數字

2021-07-11 18:16:13 字數 1669 閱讀 9799

陣列中只出現一次的數字

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。

這道題思路想出來後就很簡單了,可是我卻寫錯了乙個地方,導致除錯了很久。。

// 37.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include using namespace::std;

class solution

unsigned int bit = 0;

while (((dividenum & 1) == 0) && (bit < 8 * sizeof(int)))

*num1 = *num2 = 0;

for (int i = 0; i < data.size(); i++)

else

} }bool isbit(int num, int index)

bool iszero(int num, unsigned int index)

};int _tmain(int argc, _tchar* argv)

if (isbit(data[i], bit))
我寫成了

if (isbit(*num1, bit))
吸取教訓!

第二次做:

第一次做時,採用的是右移,算術右移和邏輯右移的區別很大,然而算術左移和邏輯左移是一樣的,所以第二次做,我把右移換成了左移計算。

// 陣列中只出現一次的數字.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include using namespace::std;

class solution

unsigned int sperate = getodd(odd);

*num1 = 0;

*num2 = 0;

for (int i = 0; i < data.size(); ++i)

} unsigned int getodd(int dividenum)

return bit;

} bool hasbit(int num, int index)

};int _tmain(int argc, _tchar* argv)

第三次做:

class solution 

int bitindex = get_bit_index( test ) ;

*num1 = *num2 = 0 ;

for ( vector::iterator iter = data.begin(); iter != data.end(); ++ iter )

}int get_bit_index( int n )

return bits ;

}bool has_bit( int n, int index )

};

注意

( n & test ) == 0
寫成

n & test  == 0
是錯誤的!位運算的優先順序比較低!

37 陣列中只出現一次的數字

乙個整型陣列中除了兩個數字以外,其他數字都出現了兩次。請找出這個兩個數字 1 利用異或原理。異或中又m m 0,即兩個相同的數字異或得0 2 該題目有乙個簡化版本為 乙個整型陣列中除了 一 個數字以外,其他數字都出現了兩次。請找出這個乙個數字!answer 對陣列遍歷異或,最後的結果即為只出現一次的...

面試題37 陣列中只出現一次的數字

題目 整型陣列中除了兩個數字之外,其他的數字都出現兩次,找出這兩個只出現一次的數字 思路 利用異或運算的性質 任何乙個數字異或自己都等於0 1.從頭到尾依次異或陣列中的每個數字,最終得到的結果就是兩個只出現一次的數字的異或結果 2.異或結果的二進位制表示中至少有一位為1,找到結果數字中第乙個為1的位...

陣列中只出現一次的數字

何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。輸入 每個測試案例包括兩行 第一行包含乙個整數n,表示陣列大小。2 n 10 6。第二行包含n個整數,表示陣列元素,元素均為int。輸...