陣列中只出現一次的數字
乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。
這道題思路想出來後就很簡單了,可是我卻寫錯了乙個地方,導致除錯了很久。。
// 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。輸...