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