基于visual Studio2013解决面试题之0608找出两个只出现一次的数
生活随笔
收集整理的這篇文章主要介紹了
基于visual Studio2013解决面试题之0608找出两个只出现一次的数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目
解決代碼及點(diǎn)評
/*已知數(shù)組中有兩個(gè)數(shù)只出現(xiàn)一次,其他成對出現(xiàn),請找出這兩個(gè)數(shù)解決辦法:1)簡化問題,如果數(shù)組中只有一個(gè)數(shù)出現(xiàn)一次,那么只要對這個(gè)數(shù)組做異或即可2)所以這個(gè)問題的根本是,怎么把這兩個(gè)數(shù)分開在兩組里,這兩組數(shù)據(jù)都有問題1)的特點(diǎn)3)再分別找出這兩個(gè)數(shù)分組辦法:1)將所有數(shù)據(jù)做異或,那么這個(gè)結(jié)果相當(dāng)于兩個(gè)只出現(xiàn)一次的那個(gè)值的異或2)在這個(gè)結(jié)果里,找出某個(gè)位置為1的位3)根據(jù)這個(gè)位的值,將數(shù)組分成兩組,一組是該位為0,一組該位為1這種分法,把兩個(gè)不同的值分在兩組,并且兩組中其他的數(shù)是成對出現(xiàn)的 */#include <iostream> using namespace std;void find(int s[],int len) {if(len<2) return;// 將所有元素的異或值保存在xResultint xResult = s[0];for (int i = 1; i < len; ++i){xResult ^= s[i];}// 并且保存在aResult和bResult,最后aResult和bResult將會輸出不同的兩個(gè)數(shù)int aResult = xResult, bResult = xResult;// 計(jì)算哪個(gè)位為1int bit = 0; ?while (!(bResult & (1 << bit))) ++bit;// 通過該位得到一個(gè)該位為1的數(shù),這個(gè)數(shù)將把整個(gè)數(shù)組分成兩部分int andValue = 1 << bit;for (int i = 0; i < len; ++i){// 如果數(shù)組中某個(gè)數(shù),該位為1,則與aResult做異或if (s[i] & andValue)aResult ^= s[i];// 否則與bResult做異或,這樣相當(dāng)于將數(shù)組分成兩部分了elsebResult ^= s[i];}// 輸出結(jié)果cout << aResult << " " << bResult << endl; }// 測試主函數(shù) int main() {int s[]={1,2,7,4,5,4,5,2,6,1};int len=sizeof(s)/sizeof(int);find(s,len);system("pause");return 0; }代碼下載及其運(yùn)行
代碼下載地址:http://download.csdn.net/detail/yincheng01/6704519
解壓密碼:c.itcast.cn
下載代碼并解壓后,用VC2013打開interview.sln,并設(shè)置對應(yīng)的啟動項(xiàng)目后,點(diǎn)擊運(yùn)行即可,具體步驟如下:
1)設(shè)置啟動項(xiàng)目:右鍵點(diǎn)擊解決方案,在彈出菜單中選擇“設(shè)置啟動項(xiàng)目”
2)在下拉框中選擇相應(yīng)項(xiàng)目,項(xiàng)目名和博客編號一致
3)點(diǎn)擊“本地Windows調(diào)試器”運(yùn)行
程序運(yùn)行結(jié)果
轉(zhuǎn)載于:https://www.cnblogs.com/new0801/p/6177346.html
總結(jié)
以上是生活随笔為你收集整理的基于visual Studio2013解决面试题之0608找出两个只出现一次的数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery获取select中的opti
- 下一篇: 使用indexOf()算出长字符串中包含