//統計出現一次的數字(其它數字只出現兩次)
#include "stdafx.h"
#include
#include
#include
using namespace std;
unsigned int firstbitis1(int num)
int k = 0;
for (; num % 2 == 0; num /= 2)
return k;
}//unsigned int firstbitis1(int num)
// return index;
//}//bool is1(int num, unsigned int bit)
bool is1(int num, unsigned int bit)
int i,s=0;
unsigned int j;
if (data == null && length < 2)
for (i = 0; i < length; i++)
j = firstbitis1(s);
*num1 = 0;
*num2 = 0;
for (i = 0; i < length; i++)
else }
}// ********************測試**********************
void test(char* testname, int data, int length, int expected1, int expected2)
void test1()
; test("test1", data, sizeof(data) / sizeof(int), 4, 6);
}void test2()
; test("test2", data, sizeof(data) / sizeof(int), 4, 6);
}void test3()
; test("test3", data, sizeof(data) / sizeof(int), 4, 6);
}int _tmain(int argc, _tchar* argv)
題目原意是在數字序列中找出其中只出現一次的數字,而序列中的其他數字出現兩次。
可以這樣考慮:由於序列中的其它資料出現2次,因此,相同的數字異或運算得到的結果是0,而不同的兩數異或得到的二進位制結果中某個位上的數字必定為1。異或運算服從交換率,因此,將序列中的數字依次執行異或運算,最後得到的二進位制位中最低某位為1,假設該位為m位。很顯然,將序列中按第m位為1或0分為2個子序列,出現一次的數字分別位於兩個子串行中,兩個子串行中的其它數字軍出現兩次。再次分別將兩個子串行中的數字做異或運算,得到的兩個結果即為原序列中出現一次的數字。
該方法充分利用異或運算中同一位置二進位制數相同為0的性質,出現兩次的數字相異的結果為0,最終得出結果。
//劍指offer中統計出現一次的數字(其它數字只出現兩次)
#include "stdafx.h"
#include#include#includeusing namespace std;
unsigned int firstbitis1(int num)
int k = 0;
for (; num % 2 == 0; num /= 2)
return k;
}//unsigned int firstbitis1(int num)
// return index;
//}//bool is1(int num, unsigned int bit)
bool is1(int num, unsigned int bit)
int i,s=0;
unsigned int j;
if (data == null && length < 2)
for (i = 0; i < length; i++)
j = firstbitis1(s);
*num1 = 0;
*num2 = 0;
for (i = 0; i < length; i++)
else }
}// ********************測試**********************
void test(char* testname, int data, int length, int expected1, int expected2)
void test1()
; test("test1", data, sizeof(data) / sizeof(int), 4, 6);
}void test2()
; test("test2", data, sizeof(data) / sizeof(int), 4, 6);
}void test3()
; test("test3", data, sizeof(data) / sizeof(int), 4, 6);
}int _tmain(int argc, _tchar* argv)
{ test1();
test2();
test3();
/*cout <
陣列中出現一次的數字
題目 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 分析 我們可以先考慮乙個稍微簡單點的情況,乙個整型陣列裡除了乙個數字之外,其他的數字都出現了兩次。這是上面題目的乙個簡化版本。我們只要能解決這個問題了,然後將...
只出現一次的數字
1.乙個整型陣列,有乙個數字出現一次,其餘數字出現兩次,找出這個只出現一次的數字。解題思路 異或運算性質 兩個相同的數字異或得0,0與乙個數字異或得數字本身,而且異或運算是滿足交換律的 陣列元素按位異或,交換律可以想象成相同的數字參與運算的時候是相鄰的 所有出現兩次的數字異或之後得0,最後剩餘的是0...
只出現一次的數字
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1示例 2 輸入 4,1,2,1,2 輸出 4核心思想 對list排序,然後遍歷 class ...